PDA

Ver la Versión Completa : Filtro con 2 tablas


GonzaloDias
17-04-2012, 15:54:49
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.


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,


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í:

query1.SQL.Add('and c.Nombre like "%edit3.text%"');

Prueba así:
query1.sql.add('and c.nombre like %' +#39+ edit3.text +#39+ '%' );

Caral
17-04-2012, 17:52:47
Hola

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.


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
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
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:

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:

http://neftali.clubdelphi.com/images/UtilizarTAGs.png


.

ElDioni
23-04-2012, 12:37:06
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
chssst, esas cosas no se dicen en público.:rolleyes:

:o...:):D




.