Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Providers (https://www.clubdelphi.com/foros/forumdisplay.php?f=10)
-   -   ClientDataSets con parámetros, no funciona la consulta (https://www.clubdelphi.com/foros/showthread.php?t=60704)

rochi 10-10-2008 18:54:14

ClientDataSets con parámetros, no funciona la consulta
 
Hola, necesito filtrar los datos desde el server para no traer todos. El usuario selecciona por cual campo buscar (esos serán los de los parámetros).

Trabajo con Delphi 7 + Fb 2.0 + IBX + ClientDatasets.
Una IBQuery con parámetros, "Nombre" y "DNI" y su sentencia SQL es la encargada de recoger los datos.

Tengo 2 campos por los que filtrar, uno u otro, excluyentes, cuando busco por DNI, al parámetro lo seteo con un valor inexistente de DNI, así solo traerá lo que encuentre por Nombre.

Código:

//Aqui quiero que solo busque por nombre, pongo un DNI inexistente
 //como parámetro:
 procedure TfwndABMPac.RadioButton2Click(Sender: TObject);
 begin
  inherited;
  dmClientes.cdsClientes.Params.ParamByName('DNI').AsString := '####';
  dmClientes.cdsClientes.Params.ParamByName('Nombre').AsString :=
 (UpperCase(edBusq.Text))+'%';
 end;

La sentencia SQL del ibQryClientes, es asignada en tiempo de diseño:
Código:

select * from Clientes where (Upper(Nombre) Containing :Nombre) or
(Upper(DNI) Containing :DNI)

En el evento OnChange que se ejecuta posteriormente está lo siguiente:
Código:

dmClientes.cdsClientes.Close;
dmClientes.cdsClientes.FetchParams;
dmClientes.cdsClientes.Open;

Si está o no el FetchParams da igual no veo cambios. ¿Qué tiene de malo mi consulta SQL?, también probé seteando los parámetros del ibqry en lugar de los del CDS, pero tampoco funcionó.

Intenté sobreescribiendo con la consulta usando el CommandText del CDS y tampoco anduvo.

Es todo, salutes! gracias por cualquier sugerencia.
ro

maeyanes 10-10-2008 19:09:40

Hola...

Podrías poner la consulta SQL?


Saludos...

Al González 10-10-2008 19:29:40

¡Hola!

Me parece que el problema está en el símbolo de porcentaje que agregas al nombre a buscar. Éste se utiliza con Like, pero para Containing no representa un carácter especial, así que el servidor está buscando aquellos nombres que contengan la cadena completa dada, incluyendo el símbolo de porcentaje. Y como los nombres suelen carecer de símbolos especiales, es normal que no arroje resultados (si es que a eso te refieres con «no veo cambios»).

Por otro lado, puedes ahorrarte el "Upper" ya que al parecer Containing no discrimina entre mayúsculas y minúsculas.

Un abrazo al 100%.

Al González. :)

rochi 10-10-2008 20:47:24

Exacto era eso, me di cuenta después, saqué el '%' y el Upper, ya que Containing es case insensitive.
Estuve buscando algo de información respecto a qué optimiza mejor las consultas si el uso del Like, Containg, etc. pero no encuentro nada relacionado con Firebird al respecto.
Si alguien sabe de algun enlace se los agradezco.

La consulta SQL es:
Código:

select * from Clientes where ((Nombre Containing :Nombre) or (DNI Containing :DNI))
La dejo por si es optimizable, saludos y gracias al 100:% :)


La franja horaria es GMT +2. Ahora son las 17:33:37.

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