Filtrar en DBGrid para Access
Hola, tengo una Base de Datos en Access llamada Base de datos.mdb conectada a mi aplicación mediante un Adotable (Adotable1) y un DataSource (DataSource1) con una tabla llamada Choferes, la cual se muestra mediante un DBGrid (DBGrid1) mi pregunta es la siguiente:
Quisiera realizar un Filtrado por la columna "Nombre" de manera tal que al escribir en un Edit cualquier letra ej "ier" me muestre todos los campos que contengan dichas letras ejemplo: Javier, Reinier, Iercos, etc... y que al borrar las letras del Edit, se vuelvan a mostrar todos los Campos de la Tabla. Muchas gracias de antemano y feliz año nuevo para todos. |
Revisa este ejemplo y el código que hay en mi página a ver si es lo que buscas.
Si revisas el FTP, sección de ejemplos, es posible que también encuentres alguno más. |
No entendí nada
Disculpa ignorancia, pero no entendí nada, yo he buscado entre otras dudas ya planteadas y todo el mundo pregunta sobre el filtrado con ADOQuery y esas cosas, yo estoy utilizando ADOTABLE y DATASOURCE en un DBGRID conectado a una tabla de Access, pero sobre eso no he visto nada. Gracias de todos modos, seguiré intentándolo. Feliz fin de año.
|
Perdona, yo mismo me hice un lío leyendo "rápido"; Si estás utilizando ADOTable, busca en la ayuda sobre Filtered y Filter del TADOTable.
De todas formas tengo dudas de si con estas propiedades vas a poder conseguir el filtro que necesitas (que contengan....) De todas formas, para un filtro de tipo LIKE, como el que necesitas, creo que lo más sencillo es que conviertas el ADOTable en un ADOQuery y utilices el código que te he pasado |
Ya me funciona, pero tengo un problema...
El Filtrado me funciona bien con el siguiente código:
procedure TForm1.Edit1Change(Sender: TObject); begin If (Edit1.text <> '') then Adotable1.Filter := 'Nombre Like '''+ Edit1.Text + '*'''; end; Pero tengo un problema, al borrar el texto escrito en el Edit1, en lugar de regresar todos los campos, se queda tal y cómo está el filtrado, lo que necesito es que si busco "ier" salgan todos los nombres que contengan esas letras, pero al borrar "ier" del edit, que vuelvan a aparecer todos. |
Hola Javier.
Por favor cuando pongas código en tus mensajes utiliza TAG's, la imágen siguiente explica su uso: Ahora en referencia a tu pregunta, probá de este modo:
Saludos. |
Me da el siguiente error
Probé con ese código, pero me dá el siguiente error: Proyect DatosChoferes.exe raised exception class EOleException with message "No se encontró el elemento en la colección que corresponde con el nombre o el ordinal pedido". Process stopped. use Step or Run to continue.
|
Hola Javier.
El código anterior lo escribí en el aire, pero acabo de probarlo y filtra sin error. Por el tipo de error que te arroja diría que revises que el campo Nombre exista o esté bién escrito. Este es el código exácto de la prueba que hice ahora y funciona correctamente:
Saludos. |
Si, funciona...
Es cierto que funciona, disculpa fué un error mío a la hora de escribir. Pero De esta manera el filtrado sólo se puede hacer por los nombres tal y como comienzan.
Javier Roberto Carlos Reinier si yo escribo en el edit "javier" no sale nada, porque debe de iniciar con mayúscula. si yo escribo "ier" no filtra nada, cuando debería filtrar Javier y Reinier. De cualquier forma te agradezco tu ayuda. |
Hola
El problema que veo es que el filtro va buscando letra a letra, osea de principio a fin de la palabra buscada. Si filtras Javier, buscara la J primero, la a segundo y asi sucesivamente. Para que filtre sin selección se tendría que usar la funcion AnsiContainsStr que ademas distingue entre mayúsculas y minúsculas. No se me ocurre como filtrar la tabla asi, tal vez practicando esta funcion encontraras una solucion. Este es un ejemplo de uso:
Aqui compara el contenido del edit1 y del 2. Seguro que algun maestro te dira como usar esto en el filtro. Saludos |
¿Como puedo contactar a un maestro? ¿O espero a que ellos escriban?
Bueno, si alguien conoce como utilizar esa función, se los agradeceré. Feliz fin de año.
|
yo hago esto, espero que te sirva
|
La franja horaria es GMT +2. Ahora son las 16:24:32. |
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