Jump to content


Photo

Consulta Multi Tabla con Delphi

multi tabla delphi

Best Answer egostar , 08 May 2017 - 04:05 PM

Hola, yo lo hago mas o menos así:
 
 

sql
  1. ......
  2.  
  3. SQL.Text := 'SELECT ctrlont.INDEX_ID , ctrlont.VLAN_ID, ctrlont.FRAME_ID, ctrlont.SLOT_ID, ctrlont.PORT_ID, ctrlont.ONT_ID, ctrlont.CONT_CL, clientes.NOM_CL, ' + #13 +
  4.             'clientes.APPAT_CL, clientes.APMAT_CL, ctrlont.ZONA_CL, ctrlont.COLOR_CL, clientes.COL_CL, onts.MAC_ONT, onts.MOD_ONT, onts.IP_ONT, ctrlont.FOLIO ' + #13 +
  5.             'FROM CTRLONT ' + #13 +
  6.             'INNER JOIN clientes ON ctrlont.FOLIO = clientes.FOLIO ' + #13 +
  7.             'INNER JOIN onts ON ctrlont.FOLIO = onts.FOLIO ' + #13 +
  8.             'ORDER BY ctrlont.INDEX_ID ASC '
  9. OPEN;
  10. ......

 
 
Saludos Go to the full post


  • Please log in to reply
6 replies to this topic

#1 Koalasoft

Koalasoft

    Advanced Member

  • Miembros
  • PipPipPip
  • 142 posts
  • LocationMéxico

Posted 08 May 2017 - 01:29 PM

Estimados buenas tardes ... una duda ..
 
Deseo hacer una consulta multi tabla, en el cual hice lo siguiente en el manejadr de base d datos llamado HeidySQL la siguiente consulta:

sql
  1. SELECT ctrlont.INDEX_ID , ctrlont.VLAN_ID, ctrlont.FRAME_ID, ctrlont.SLOT_ID, ctrlont.PORT_ID, ctrlont.ONT_ID, ctrlont.CONT_CL, clientes.NOM_CL, clientes.APPAT_CL, clientes.APMAT_CL, ctrlont.ZONA_CL, ctrlont.COLOR_CL, clientes.COL_CL, clientes.CALLE_CL, onts.MAC_ONT, onts.MOD_ONT, onts.IP_ONT, ctrlont.FOLIO FROM ctrlont INNER JOIN clientes ON ctrlont.FOLIO = clientes.FOLIO INNER JOIN onts ON ctrlont.FOLIO = onts.FOLIO ORDER BY ctrlont.INDEX_ID ASC

El cual todo salió muy bien .. el detalle salio al implementarlo en Delphi (D7), hice los siguiente:

delphi
  1. var SQLTEXT : string;
  2. Begin
  3. ..
  4. .
  5. with DMod1.ADOQueryCtrlONT do
  6. begin
  7. SQLTEXT:='SELECT ctrlont.INDEX_ID , ctrlont.VLAN_ID, ctrlont.FRAME_ID, ctrlont.SLOT_ID, ctrlont.PORT_ID, ctrlont.ONT_ID, ctrlont.CONT_CL, clientes.NOM_CL, clientes.APPAT_CL, clientes.APMAT_CL, ctrlont.ZONA_CL, ctrlont.COLOR_CL, clientes.COL_CL, onts.MAC_ONT, onts.MOD_ONT, onts.IP_ONT, ctrlont.FOLIO ';
  8. SQLTEXT:= SQLTEXT + 'FROM CTRLONT ';
  9. SQLTEXT:= SQLTEXT + 'INNER JOIN clientes ON ctrlont.FOLIO = clientes.FOLIO ';
  10. SQLTEXT:= SQLTEXT + 'INNER JOIN onts ON ctrlont.FOLIO = onts.FOLIO ';
  11. SQLTEXT:= SQLTEXT + 'ORDER BY ctrlont.INDEX_ID ASC ';
  12. Active:= False;
  13. Close;
  14. SQL.Clear;
  15. SQL.Add(SQLTEXT);
  16. Open;
  17. Active:= True;
  18. end;
  19. // ---------------------------------
  20. ClientDataSet1.Close;
  21. ClientDataSet1.SetProvider(DMod1.DataSetProviderCtrlONT);
  22. ClientDataSet1.Open;
  23. // ---------------------------------

Pero al compilar el programa me envía el siguiente mensaje ...
 
[Error] xxxx.pas(67): String literals may have at most 255 elements
 
Entiendo que se trata de que es una cadena muy grande para este tipo de variable, pero cual seria la mejor opción para este tipo de consulta, ya estoy consultando 3 tablas diferentes en donde todas ellas el campo FOLIO existe en cada una de ellas.
 
Como explique en el manejador sale bien, solo en delphi manda ese mensaje.
 
Gracias anticipadas por su comentarios !!
  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14466 posts
  • LocationMéxico

Posted 08 May 2017 - 04:05 PM   Best Answer

Hola, yo lo hago mas o menos así:
 
 

sql
  1. ......
  2.  
  3. SQL.Text := 'SELECT ctrlont.INDEX_ID , ctrlont.VLAN_ID, ctrlont.FRAME_ID, ctrlont.SLOT_ID, ctrlont.PORT_ID, ctrlont.ONT_ID, ctrlont.CONT_CL, clientes.NOM_CL, ' + #13 +
  4.             'clientes.APPAT_CL, clientes.APMAT_CL, ctrlont.ZONA_CL, ctrlont.COLOR_CL, clientes.COL_CL, onts.MAC_ONT, onts.MOD_ONT, onts.IP_ONT, ctrlont.FOLIO ' + #13 +
  5.             'FROM CTRLONT ' + #13 +
  6.             'INNER JOIN clientes ON ctrlont.FOLIO = clientes.FOLIO ' + #13 +
  7.             'INNER JOIN onts ON ctrlont.FOLIO = onts.FOLIO ' + #13 +
  8.             'ORDER BY ctrlont.INDEX_ID ASC '
  9. OPEN;
  10. ......

 
 
Saludos
  • 0

#3 Koalasoft

Koalasoft

    Advanced Member

  • Miembros
  • PipPipPip
  • 142 posts
  • LocationMéxico

Posted 08 May 2017 - 05:23 PM

Excelente muchas gracias por tu respuesta !! .. tema solucionado...

 

 

Nota: Por cierto Feliz cumpleaños estimado !!  saludos .. 


  • 1

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14466 posts
  • LocationMéxico

Posted 08 May 2017 - 07:38 PM

Excelente muchas gracias por tu respuesta !! .. tema solucionado...

 

Excelente...
 

Nota: Por cierto Feliz cumpleaños estimado !!  saludos ..


Muchas gracias amigo Koalasoft :)

Saludos


  • 0

#5 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1484 posts
  • LocationMallorca

Posted 09 May 2017 - 01:42 AM

Una alternativa :

delphi
  1. ....
  2. ....
  3.  
  4. SQL.Clear;
  5. SQL.Add('SELECT ctrlont.INDEX_ID , ctrlont.VLAN_ID, ctrlont.FRAME_ID, ctrlont.SLOT_ID, ctrlont.PORT_ID, ctrlont.ONT_ID, ctrlont.CONT_CL, clientes.NOM_CL, ');
  6. SQL.Add('clientes.APPAT_CL, clientes.APMAT_CL, ctrlont.ZONA_CL, ctrlont.COLOR_CL, clientes.COL_CL, onts.MAC_ONT, onts.MOD_ONT, onts.IP_ONT, ctrlont.FOLIO ');
  7. SQL.Add('FROM CTRLONT ');
  8. SQL.Add('INNER JOIN clientes ON ctrlont.FOLIO = clientes.FOLIO ');
  9. SQL.Add('INNER JOIN onts ON ctrlont.FOLIO = onts.FOLIO ');
  10. SQL.Add('ORDER BY ctrlont.INDEX_ID ASC ');
  11.  
  12. Open;
  13.  
  14. ....
  15. ....


  • 0

#6 Koalasoft

Koalasoft

    Advanced Member

  • Miembros
  • PipPipPip
  • 142 posts
  • LocationMéxico

Posted 09 May 2017 - 11:34 AM

Igual esta perfecto ! gracias

 

Una alternativa :


delphi
  1. ....
  2. ....
  3.  
  4. SQL.Clear;
  5. SQL.Add('SELECT ctrlont.INDEX_ID , ctrlont.VLAN_ID, ctrlont.FRAME_ID, ctrlont.SLOT_ID, ctrlont.PORT_ID, ctrlont.ONT_ID, ctrlont.CONT_CL, clientes.NOM_CL, ');
  6. SQL.Add('clientes.APPAT_CL, clientes.APMAT_CL, ctrlont.ZONA_CL, ctrlont.COLOR_CL, clientes.COL_CL, onts.MAC_ONT, onts.MOD_ONT, onts.IP_ONT, ctrlont.FOLIO ');
  7. SQL.Add('FROM CTRLONT ');
  8. SQL.Add('INNER JOIN clientes ON ctrlont.FOLIO = clientes.FOLIO ');
  9. SQL.Add('INNER JOIN onts ON ctrlont.FOLIO = onts.FOLIO ');
  10. SQL.Add('ORDER BY ctrlont.INDEX_ID ASC ');
  11.  
  12. Open;
  13.  
  14. ....
  15. ....

 

 

Igual esta perfecto !! muchas gracias !! 


  • 0

#7 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14466 posts
  • LocationMéxico

Posted 09 May 2017 - 11:53 AM

Una alternativa :


delphi
  1. ....
  2. ....
  3.  
  4. SQL.Clear;
  5. SQL.Add('SELECT ctrlont.INDEX_ID , ctrlont.VLAN_ID, ctrlont.FRAME_ID, ctrlont.SLOT_ID, ctrlont.PORT_ID, ctrlont.ONT_ID, ctrlont.CONT_CL, clientes.NOM_CL, ');
  6. SQL.Add('clientes.APPAT_CL, clientes.APMAT_CL, ctrlont.ZONA_CL, ctrlont.COLOR_CL, clientes.COL_CL, onts.MAC_ONT, onts.MOD_ONT, onts.IP_ONT, ctrlont.FOLIO ');
  7. SQL.Add('FROM CTRLONT ');
  8. SQL.Add('INNER JOIN clientes ON ctrlont.FOLIO = clientes.FOLIO ');
  9. SQL.Add('INNER JOIN onts ON ctrlont.FOLIO = onts.FOLIO ');
  10. SQL.Add('ORDER BY ctrlont.INDEX_ID ASC ');
  11.  
  12. Open;
  13.  
  14. ....
  15. ....

 

Perdón amigo Marc, pero soy flojo y casi siempre se me olvida que se necesita el Query.Clear para que no salte algún error :D :D :D

Saludos


  • 0




IP.Board spam blocked by CleanTalk.