Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-01-2017
koalasoft koalasoft is offline
Miembro
 
Registrado: oct 2004
Ubicación: Tenosique Tabasco
Posts: 86
Poder: 20
koalasoft Va por buen camino
Buscar entre 3 tablas y mostrarlo en DBText el Resultado

Estimados tengo el siguiente detalles.

Tengo 3 Tablas diferentes con los siguientes campos:

Código:
ONT.db
ID_ONT
MAC
SERIE
TIPO
FOLIO
 
CLIENTES.db
ID_CL
NOMBRE
DIRECCION
TELEFONO
FOLIO
 
CTRL.db
BOARD
VELOCIDAD
STATUS
ID_CL
ID_ONT
FOLIO
Es una tabla (ONT.db) que es un equipo, el de clientes (cliente.db) y una tabla para llaver el control (ctrl.db)

Lo que pretendo es que ya que en la tres tablas tiene el campo FOLIO que es generado al trabajar en la tabla CTRL.db, en este último guardo solo los ID de cliente y equipo (ont) para que no haya redundancia de información en las tablas, es por eso que solo guardo el ID de cada uno.. ahora bien ..

Tengo el siguiente escenario...

coloque 3 query en el form, uno para cada tabla QueryONT, QueryCL QueryCTRL,, coloque unos DBTexto donde esta la sección donde aparecerá el nombre del cliente, en el otra sección los datos del equipo (ont) y lo demás datos que tiene la tabla CTRLONT igual en unos DBText.

Tengo este código...


Código Delphi [-]
with QueryCTRL do          // Busqueda por Modelo y Tipo
 begin
   Close;
   SQL.Clear;
   // ------------------------------------------------------------
   // Se ultilizó el PArametro JOIN para unir las otras Tablas
   // relacionando el Campo FOLIO en todas ellas siempre y cuando
   // Se cumpliera la condicion de busqueda del ONT ya registrado.
   // ------------------------------------------------------------
   SQL.Add('SELECT * FROM CTRL.db CTRL ');
   SQL.Add('join CLIENTES.db CL on CTRL.FOLIO = CL.FOLIO ');
   SQL.Add('join ONT.db ONT on CTRL.FOLIO = ONT.Folio ');
   SQL.Add('WHERE BOARD_ONT=:BOARD_ONT');  
   // --------------------------------------------------------
   //  Valores de búsqueda para el tablero.
   // --------------------------------------------------------
   ParamByName('BOARD_ONT').AsInteger := StrToInt(Edit1.Text);
   Open;
   if QueryCTRL.IsEmpty then
    Begin
    msError('El ONT no se encuentra registrado, porfavor verifica los datos.','No existe Datos..');
    End
     Else
      Begin
      Bok.Enabled := True;
      End;
 end;

Use la opción join ya que dice que puedes checar la similitud de campos entre tablas .... si me hace la búsqueda cn la condición que le puse .. pero en el fomulario no me muestra los datos restantes del cliente (nnombre, direccion, tel,etc..) y equipo ont (MAC, SERIE, TIPO)..

Me faltará algo para que e muestre os datos restantes teniendo solo relacionado entre ellos el folio??


Gracias !!

Última edición por Casimiro Notevi fecha: 08-01-2017 a las 12:00:28.
Responder Con Cita
  #2  
Antiguo 08-01-2017
koalasoft koalasoft is offline
Miembro
 
Registrado: oct 2004
Ubicación: Tenosique Tabasco
Posts: 86
Poder: 20
koalasoft Va por buen camino
Que tal .. pues me respondo a mi mismo, busqué esta forma no se si sea la mas elegante pero al menos funcionó en lo que buscaba !!

Declaré una variable para extraer el folio y después ya teniendo ese valor lo use para consultar las demás ..

Código Delphi [-]
Var
  F : Integer;

...
..
.

with QueryCTRL do          // Busqueda por Modelo y Tipo
 begin
   Close;
   SQL.Clear;
   // ------------------------------------------------------------
   // Se ultilizó el PArametro JOIN para unir las otras Tablas
   // relacionando el Campo FOLIO en todas ellas siempre y cuando
   // Se cumpliera la condicion de busqueda del ONT ya registrado.
   // ------------------------------------------------------------
   SQL.Add('SELECT * FROM CTRL.db CTRL ');
   SQL.Add('join CLIENTES.db CL on CTRL.FOLIO = CL.FOLIO ');
   SQL.Add('join ONT.db ONT on CTRL.FOLIO = ONT.Folio ');
   SQL.Add('WHERE BOARD_ONT=:BOARD_ONT'); 
   // --------------------------------------------------------
   //  Valores de búsqueda para el tablero.
   // --------------------------------------------------------
   ParamByName('BOARD_ONT').AsInteger := StrToInt(Edit1.Text);
   Open;
   if QueryCTRL.IsEmpty then
    Begin
    msError('El ONT no se encuentra registrado, porfavor verifica los datos.','No existe Datos..');
    End
     Else
      Begin
      F:= QueryRegONT.FieldByName('FOLIO').AsInteger;      // -------------------
      with QueryCL do          // Busqueda por Modelo y Tipo
        begin
          Close;
          SQL.Clear;
          SQL.Add('SELECT * FROM CLIENTES.db ');
          SQL.Add('WHERE FOLIO=:FOLIO');
          ParamByName('FOLIO').AsInteger :=F;
          Open;
        end;
      with QueryONT do          // Busqueda por Modelo y Tipo
        begin
          Close;
          SQL.Clear;
          SQL.Add('SELECT * FROM ONT.db ');
          SQL.Add('WHERE FOLIO=:FOLIO');
          ParamByName('FOLIO').AsInteger :=F;
          Open;
        end;      
    End;
 end;

Con esto, una vez realizada la primera búsqueda, extraigo el campo FOLIO que esta relacionado con las otras tablas, ahora solo lo guarde en una variable y lo use en las otras búsquedas.

Gracias y quedo solucionado por mi parte, si hay alguna mejor idea por favor de compartir !! ..

Última edición por Casimiro Notevi fecha: 08-01-2017 a las 12:00:52.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
buscar entre fecha y horas anubis SQL 2 01-01-2011 12:09:57
resultado producto de tablas johurgi SQL 3 20-11-2009 20:14:27
Buscar en resultado de consulta SQL alvarocastillo SQL 6 06-11-2007 17:28:54
buscar entre dos fechas jocey Varios 1 25-10-2007 22:05:52
Diferencia entre Watch y resultado final. Enan0 Varios 2 17-09-2006 09:22:36


La franja horaria es GMT +2. Ahora son las 11:24:44.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi