Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Problemas con filtro dinámico (https://www.clubdelphi.com/foros/showthread.php?t=12114)

Walterdf 06-07-2004 15:38:23

Problemas con filtro dinámico
 
Buenas
Tengo una Query, un TEdit y un dbgrid atado a esa Query. Quisiera que a medida que yo escriba en el TEdit me vaya buscando en el DBGrid el registro que coincida con ese texto y lo hice de esta manera:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
with query1 do
begin
Close;
SQL.Clear;
SQL.ADD('select numero from "c:\base.db" where CAMPO like' + quotedstr(edit1.text));
Open;
end;
end;

Pero , por ejemplo, si yo quiero buscar el codigo 1203 me sucede lo siguiente:

cuando escribo el 1, el dbgrid queda en blanco,
cuando presiono el 2 me muestra todos los que empiezan con 1,
cuando presiono el 0 me muestra todos los que empiezan con 12,
cuando presiono el 3 me muestra todos los que empiezan con 120, y ahí se queda salvo que le de un enter o ponga otro caracter.

No se me ocurre como solucionar esto, si alguien puede darme una mano se lo agradeceré.
Saludos.

Walter.

eduarcol 06-07-2004 15:55:41

Lo que pasa es que no colocastes los operadores % seria algo asi

Like %ValorBuscar%

Donde el % lo debes colocar dond quieras que la consulta devuelva el resto de los valores

o sea:

Para todos los registros que comienzen con uno seria : like 1%
Para todos los registros que terminen con uno seria : like %1
Para todos los registros que contengan un uno no importa la posicion seria : like %1%

Walterdf 06-07-2004 16:09:54

Ya lo había probado, puse:

con esto sigo como al principio:
quotedstr(edit1.text + '%')

con esto me busca cualquier cosa:
quotedstr('%' + edit1.text + '%')

y con esto tambien me da cualquier cosa:
quotedstr('%' + edit1.text)

Creo que el problema viene por el lado del OnKeyPress, si me pueden ayudar...

Gracias, de todas maneras.
Saludos.
Walter

eduarcol 06-07-2004 16:30:21

y si lo colocas en el evento onchange??

roman 06-07-2004 16:32:15

El problema es que cuando entras al evento OnKeyPress, la tecla que lo generó aun no se anexa al texto del Edit.

Esto es, si en un momento dado Edit.Text = '12' y presionas '0', al entrar al evento Edit1.Text aún es igual a '12'. No es sino hasta que sales del evento que pasa a ser Edit.Text = '120'.

Podrías intentar solucionarlo cambiando el LIKE por:

LIKE QuotedStr(Edit1.Text + Key + '%')

Pero aún así tendrás que tratar el caso en el que la tecla se un Back Space por ejemplo.

Otra opción es simplemente cambiar de evento y usar OnChange en lugar de OnKeyPress.

Por otra parte toma en cuenta que este método que usas puede ser algo muy lento ya que con cada tecla haces una consulta a la base de datos.

// Saludos

Walterdf 08-07-2004 17:06:31

Muchas gracias ahora anduvo de 10.

Un abrazo.

Walter


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

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