Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Filtrado de registros de dos tablas erróneos (https://www.clubdelphi.com/foros/showthread.php?t=84558)

Irlod 04-11-2013 10:48:51

Filtrado de registros de dos tablas erróneos
 
Hola amigos.
Necesito vuestra ayuda para resolver una cuestión que llevo tiempo intentando resolver. En Access tengo una BD con varias tablas, entre ellas tengo las tablas: Equipos y OperacionesEquipos, con un campo común a las dos: EUIPOCODIGO.
En el proyecto de Delphi tengo un formulario con un PageControl con cuatro pestañas. En las tres primeras me muestra a través de DBEdits todos los campos de la ficha Equipo. En la cuarta pestaña en colocado una DBGrid para que me liste todos los registros para un equipo dado de la tabla OperacionesEquipos.
Mi problema está en que me registra todos los registros, y yo solo quiero que me muestre los de un equipo concreto.

En el código he creado un DataSource y un ADODataSet

En la consulta SQL del ADODataSet he escrito:

Código SQL [-]
SELECT *
FROM EquiposLaboratorio, OperacionesEquipos
WHERE EquiposLaboratorio.EQUIPOCODIGO = OperacionesEquipos.EQUIPOCODIGO
order by EquiposLaboratorio.EQUIPOCODIGO

También lo he intentado con otros DataSource y ADODataSet fijado para el DBGrid pero el resultado es el mismo.

¿Me podrían ayudar?. Muchas gracias.

ecfisa 04-11-2013 15:41:45

Hola Irlod y bienvenido a Club Delphi :)

Como a todos los que se inician te invitamos a que leas nuestra guía de estilo.

Proba de este modo:
Código Delphi [-]
  with ADODataSetOperaciones do
  begin
    Close;
    CommandText := 'SELECT * FROM OPERACIONESEQUIPOS WHERE EQUIPOCODIGO = :CODIGO';
    Parameters.ParamByName('CODIGO').Value :=
      ADODataSetEquipos.FieldByName('EQUIPOCODIGO').Value;
    Open;
  end;

Saludos :)

Irlod 04-11-2013 16:30:46

Gracias ecfisa, ya me había dado cuenta.

He cambiado temporalmente en la base de datos los campos EQUIPOCODIGO , por E_EQUIPOCODIGO y O_EQUIPOCODIGO para no liarnos.

Sigue sin funcionarme. Adjunto te remito el procedimiento completo de la parte donde me dá el error:

Código Delphi [-]
procedure TForm_FichaEquiposLab.FormCreate(Sender: TObject);

begin


    ADODataSet1.Active:= True;
    ADODataSet2.Active:= True;


    ADOdataSet2.Close;
    ADODataSet2.CommandText := 'SELECT * FROM OPERACIONESEQUIPOS WHERE O_EQUIPOCODIGO = :E_EQUIPOCODIGO';
    ADODataSet2.Parameters.ParamByName('O_EQUIPOCODIGO').Value :=
      ADODataSet1.FieldByName('E_EQUIPOCODIGO').Value;
    ADODataSet2.Open;

end;

ecfisa 04-11-2013 17:33:06

1 Archivos Adjunto(s)
Hola Irlod.

Para ponerlos en relación master/detail y que se vaya reflejando a medida que te desplazas por "equipos", sería algo parecido a:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  with ADODataSet2 do
  begin
    Close;
    CommandText := 'SELECT * FROM OPERACIONESEQUIPOS WHERE O_EQUIPOCODIGO = :E_EQUIPOCODIGO';
    DataSource  := DataSource1; // <- DataSource asociado a DataSet "Equipos"
    Open;
  end;
end;
Como lógicamente no puedo acceder a tus tablas, hice un demo que utiliza las tablas "Customer" y "Orders" de "dbdemos.mdb" (vienen con Delphi) para que puedas examinarlo con tranquilidad.

Seguramente tengas que editar la cadena de conección del TADOConnection para ubicar a "dbdemos.mdb", en mi caso se encuentra en: "C:\Program Files (x86)\Common Files\Borland Shared\Data".

Saludos :)

Irlod 04-11-2013 18:41:02

Muchas gracias Ecfisa, lo has solucionado. Se soluciona conectando en el DataSource del ObjectInspector el DataSource1. En mi caso tenía conectado el DataSource2 al ADODataSet2.

Muchas gracias de nuevo,
Un saludo


La franja horaria es GMT +2. Ahora son las 19:59:01.

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