![]() |
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. |
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% |
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 |
y si lo colocas en el evento onchange??
|
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 |
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