Búsqueda "incremental" en una base de datos
Hola,
De antemano le anticipo que si este hilo no va aqui lo muevan al debido lugar donde debe de ir. Lo que intento hacer es realizar una busqueda que cuando vaya poniendo las letras me vaya apareciendo los resultados. Ejemplo: Si busco un registro por nombre. Busco el nombre Manuel peo que me aparezcan los demas que empieza con m y a medida que siga poniendo las demas letras se vaya reduciendo la lista hasta quedar el que busco. Salu2. |
Hola,
Cita:
De momento quédese el hilo donde está, hasta más ver. Lo que sí he hecho ha sido editar el título del hilo, porque "Búsqueda" sólo quedaba un poco abstracto, por decirlo así. Piensa que en los títulos de los hilos se basan luego las búsquedas que se pueden llevar a cabo en los foros, de ahí la importancia de que tengan un título descriptivo. |
Puedes usar un simple Locate para posicionarte en el registro que necesites.
El problema de las búsquedas incremetales es la velocidad y los recursos que consumen. Si es una tabla pequeña, puedes utilizar un ClientDataSet para cargarla en memoria y a partir de ahí realizar la búsqueda. El problema es si no puedes cargar toda la tabla en memoria (esto no siempre es posible) o es muy grande, porque posiblemente tendrás problemas de velocidad. Coloca un Edit dobde escribes el texto y una tabla apuntando a la tabla employee de DBDemos ordenada por FirstName; Algo así:
Con este código en el OnChange debería valer.
Acabo de subir un ejemplo completo a la sección de ejemplos de mi web. Puedes descargarlo y ver el código fuente. |
Hola,
Neftali probe tu ejemplo y es lo que quiero hacer, intente hacerlo por mi mismo pero no pude. POr cierto mi base de datos esta hecha en access no se si me puedes dar una manito en eso. Saludos. |
para busquedas incrementales yo uso like
conforme el usuario va escribiendo en un textbox en el onkeypres del textbox hago lo siguiente. if textbox1.text<>'' then begin dbbrid1.beginupdate query1.close query1.sql.add('select from tabla1 where tabla1.campo like '%dato%') query1.open dbgrid.endupdate end; con esto , el dbgrid se va posicionando localizando el registro correspondiente conforme vamos escribiendo o borrando. en acces el like creo que no hay que ponerle % , el codigo es solo como funciona , hay que adaptarlo un poco. nota : para optimizar ,tambien se puede poner un temporizador (y meter el codigo en el temporizador) , y en el onkeypress dehabilitar y habilitar el temporizador , de unos 200/300ms. asi cuando escriba , no se posiciona cada vez que apretemos una tecla sino que lo hace cuando pase x tiempo despues de apretar la ultima tecla. saludos. |
Cita:
¿Error? En principio la Base de Datos no tiene nada que ver, si te fijas en el ejemplo, la búsqueda se hace sobre los datos que ya hay cargados en el DataSet (vía TClientDataSet), por lo tanto es independiente de cómo se carguen los datos. De todas formas he modificado el ejemplo para permitir cargar los datos desde un XML o desde un MDB. |
Cita:
Saludos |
Cita:
Aunque te he dado la solución, tengo que decir que si vas a acabar buscando por Manolo, yo también encuentro una tontería buscar por: m, ma, man, mano, manol y finalmente manolo. Lo que pasa que queda muy bonito y a los clientes les gusta mucho;:p Básicamente a ellos les da igual que para hacerlo así debas generar más tráfico de red de la cuenta o traerte muchos más registros de los necesarios,... Eso sí luego que funcione, que vaya muy rápido y que consuma poco...:D:D:D |
Estaba viendo este codigo que genero marcsc:
Neftali si tu pudieras poner un pequeño ejemplo hecho en access podria guiarme de ahi, ya que vi en el tuyo que usabas un archivo xml. Saludos |
Cita:
Cita:
|
La franja horaria es GMT +2. Ahora son las 10:34:47. |
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