FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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. |
#2
|
||||
|
||||
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%
__________________
...Yo naci en esta ribera del arauca vibr@d0r Soy hermano de la espuma, de la garza, de la rosa y del sol... Viva Venezuela |
#3
|
|||
|
|||
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 |
#4
|
||||
|
||||
y si lo colocas en el evento onchange??
__________________
...Yo naci en esta ribera del arauca vibr@d0r Soy hermano de la espuma, de la garza, de la rosa y del sol... Viva Venezuela |
#5
|
||||
|
||||
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 |
#6
|
|||
|
|||
Muchas gracias ahora anduvo de 10.
Un abrazo. Walter |
|
|
|