Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Filtro con 2 tablas (https://www.clubdelphi.com/foros/showthread.php?t=78409)

GonzaloDias 17-04-2012 15:54:49

Filtro con 2 tablas
 
Hola Foro que tal,
Les comento un problema que me surgio al querer filtrar en el evento on change de un edit, el problema es que filtro por el nombre y apellido de un cliente que esta relacionado a la tabla equipo que contiene clienteID,
Es decir en el edit ingreso el apellido y como no es una campo propio de Equipo sino q pertenece a Cliente, no se como podria filtrarlo con la propiedad filter ya que habria que joinear con la tabla cliente en el filtro.

Código Delphi [-]
query1.SQL.Clear;
query1.SQL.Add('Select e.Id_equipo');
query1.SQL.Add('from equipo e, cliente c');
query1.SQL.Add('where e.Id_cliente = c.Id_cliente');
query1.SQL.Add('and c.Nombre like "%edit3.text%"');
query1.Open;
de esta manera no me trae nada,

Código Delphi [-]
tbl1.Filter := 'Tbl1.Id_cliente where tbl2.Nombre='+inttostr(edit3.text);
tbl1.Filtered:=true;
en este caso no se me ocurre donde relacionar las tablas con inner join o where por las claves . Sabrian alguna forma o alternativa a estos casos? Muchas gracias desde ya foro.

Casimiro Notevi 17-04-2012 16:47:32

Creo que el problema lo tienes aquí:

Código Delphi [-]
query1.SQL.Add('and c.Nombre like "%edit3.text%"');

Prueba así:
Código Delphi [-]
query1.sql.add('and c.nombre like %' +#39+ edit3.text +#39+ '%' );

Caral 17-04-2012 17:52:47

Hola
Código Delphi [-]
query1.SQL.text:= ' Select e.Id_equipo '+
                 ' from equipo e, cliente c ' +
                 ' where e.Id_cliente = c.Id_cliente '+
                 ' and c.Nombre like :tipo ' ;
query1.Params[0].value:= '%'+edit3.text+'%';
query1.Open;
Saludos

GonzaloDias 17-04-2012 18:28:18

Buenisimo Caral me sirvio muchisimo, ahora como es que la consulta toma el parametro tipo si no se lo declara abajo (query1.Params[0].value:= '%'+edit3.text+'%';)?. Tendre en cta las otras posibilidades, Gracias de nuevo a todos.

ElDioni 17-04-2012 18:37:12

Hola,

los parametros empiezan a contar de 0 a X según se van creando, al poner param[0] hace referencia al primer parametro que se encuentre en la consulta.

Solo para que lo tengas en cuenta podrías ponerlo también de esta forma.

Código Delphi [-]
query1.SQL.text:= ' Select e.Id_equipo '+
                  ' from equipo e, cliente c ' +
                  ' where e.Id_cliente = c.Id_cliente '+
                  ' and c.Nombre like '+quotedstr('%'+edit3.text+'%');
Aunque seguramente te dirán que la forma más correcta es la que te indica Caral.

Saludos.

ElDioni 18-04-2012 12:05:54

Me he dado cuento de que puse índica en lugar de indica, a mi también me hace daño a la vista pero ya no puedo modificar el mensaje.

Saludos.

Casimiro Notevi 18-04-2012 13:29:47

Cita:

Empezado por ElDioni (Mensaje 430304)
Me he dado cuento de que puse índica en lugar de indica, a mi también me hace daño a la vista pero ya no puedo modificar el mensaje.Saludos.

Solucionado el detallito :)
Por cierto, ya que estamos de detallitos, tu firma dice: conformate en lugar de confórmate

NCcapa 23-04-2012 06:42:33

NCcapa --> Utilizando LEFT JOIN
 
Hola a todos, talvez sea la primera vez que participo espero que les sirva este codigo
particularmente yo utilizaría la siguiente consulta que en cierta forma se parece a la de Caral:

Código Delphi [-]
query1.SQL.text:= ' SELECT e.Id_equipo '+
                 ' FROM equipo e LEFT JOIN cliente c ON e.Id_cliente = c.Id_cliente ' +
                 ' WHERE c.Nombre like :NombreCliente ' ;
query1.Parameters.ParamByName('NombreCliente').Value := edit3.text;
query1.Open;

Espero ayudar en algo

hasta pronto.

Casimiro Notevi 23-04-2012 09:34:45

Gracias por participar y bienvenido a clubdelphi.

Cuando pongas código, recuerda encerrarlo entre los tags correspondientes, ejemplo:




.

ElDioni 23-04-2012 12:37:06

Cita:

Empezado por Casimiro Notevi (Mensaje 430308)
Solucionado el detallito :)
Por cierto, ya que estamos de detallitos, tu firma dice: conformate en lugar de confórmate

chssst, esas cosas no se dicen en público.:rolleyes:

Casimiro Notevi 23-04-2012 12:42:50

Cita:

Empezado por ElDioni (Mensaje 430666)
chssst, esas cosas no se dicen en público.:rolleyes:

:o...:):D




.


La franja horaria es GMT +2. Ahora son las 08:08:43.

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