Ir al contenido


Foto

Consulta Multi Tabla con Delphi

multi tabla delphi

Mejor respuesta egostar , 08 mayo 2017 - 04:05

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 Ir al mensaje completo


  • Por favor identifícate para responder
6 respuestas en este tema

#1 Koalasoft

Koalasoft

    Advanced Member

  • Miembros
  • PipPipPip
  • 142 mensajes
  • LocationMéxico

Escrito 08 mayo 2017 - 01:29

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
  • 14.446 mensajes
  • LocationMéxico

Escrito 08 mayo 2017 - 04:05   Mejor respuesta

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 mensajes
  • LocationMéxico

Escrito 08 mayo 2017 - 05:23

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
  • 14.446 mensajes
  • LocationMéxico

Escrito 08 mayo 2017 - 07:38

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
  • 1.484 mensajes
  • LocationMallorca

Escrito 09 mayo 2017 - 01:42

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 mensajes
  • LocationMéxico

Escrito 09 mayo 2017 - 11:34

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
  • 14.446 mensajes
  • LocationMéxico

Escrito 09 mayo 2017 - 11:53

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.