Delphi - Busquedas dinamicas

 
Vista:

Busquedas dinamicas

Publicado por jsr (10 intervenciones) el 29/05/2008 08:39:27
Muy Buenas:

Alguno tiene alguna idea de componente que pueda ayudarnos con las busquedas dinamicas?

Me explico; Estando en un grid al presionar una tecla el cursor se vaya desplazando al registro que va coincidiendo con lo que ingreso en un edit de busqueda.

Como lo que tiene firefox cuando le das find.

Estoy programando en delphi 5 con MySql.

Seria interesante tenerlo a nivel codigo, para comparar lo que ya tenemos hecho.

Muchas Gracias

JoSeX
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Busquedas dinamicas

Publicado por juancho (193 intervenciones) el 29/05/2008 13:03:56
La funcion Locate del dataset te servira, con locate vas posisionando el cursos de acuerdo al resultado de tu busqueda.
//el cursor del dataset se ira posicionando en el registro de acuerdo al resultado de la busqueda
MiDataSet.Locate('CAMPO', 'VALOR', [LoPartialKey]); //Debes ver la ayuda tiene unas opciones mas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Busquedas dinamicas

Publicado por pacopaz (104 intervenciones) el 29/05/2008 17:40:55
juancho tiene razón, aunque Locate sólo te llevaría a la primera ocurrencia de tu búsqueda cada vez.
Si usas Firebird y te conectas a través de los componetes InterBase, enconces encontrarías el método LocateNext, cuya sintaxis es similar, pero encontraría las ocurrencias secuencialmente, como pretendes hacerlo.
En ambos casos, la busqueda se podría implementar por columna, pero no por renglón.
La opción para hacerlo, la más fácil a mi entender, es hacer dos componentes tabla o query o sp, uno para ligarlo al datasource del dbgrid y otro para la búsqueda, ambos con el curosr del lado del cliente. En el de la búsqueda, hacer un barrido, en el dataset, de registros y campos y comparar el string de búsqueda con el valor del campo hasta encontrarlo y luego asignar el resultado al dataset del componente ligado al datasource. No es lo óptimo, pero es lo más sencillo.
Lo que se me ocurriría es hacer un array variable bidimensional de strings, que contenga todos los datos del dataset, sin embargo, en cada actualización o apertura de este, hacer el barrido completo para llenar el array puede ser muy tardado, según la cantidad de datos y luego al hacer la búsqueda, asignar la ubicación al dataset puede ser un problema también.
Esta es una de las cuasas por las cuales desistí de usar DBGrids.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Busquedas dinamicas

Publicado por BigLuis (713 intervenciones) el 29/05/2008 21:29:25
Piensa que para realizar busquedas como tu quieres tgienes que tener todos los datos de la tabla en la regilla ya que si no no lo encontrará y eso trabajando por ejemplo con 200000 registros ya me contarás. Puedes probar esto en el evento OnChange del TEdit pero tambien ten en cuenta el num ero de registros de la tabla y muy importante los indices. Yo lo tengo implementado en varias aplicaciones con MySQL y me va muy bien pero cuando los registros pasan de 100000 lo implemento en un boton sin que sea la busqueda viva.
LongText:=3;
if Length((sender as TEdit).Text)>=LongText then //para que busque a partir del caracter 3
begin
ModuloDatos.Query.Close;
ModuloDatos.Query.SQL.Clear;
ModuloDatos.Query.SQL.Add('Select * ');
ModuloDatos.Query.SQL.Add('from tabla where nombre Like (:Parametro)');
Sentencia:=(sender as TEdit).Text+'%';//Principio Igual
//Sentencia:='%'+(sender as TEdit).Text;//Final igual
//Sentencia:='%'+(sender as TEdit).Text''%';//Cualquier parte del campo
ModuloDatos.Query.Parambyname('Tira').Value:=Sentencia;
ModuloDatos.Query.Open;
Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Busquedas dinamicas

Publicado por pacopaz (104 intervenciones) el 30/05/2008 02:11:53
Aunque es completamente cierto lo que expones, Luis, que no es más fácil ponerle un filtro al dataset (Propiedades Filter y Filtered)?
A menos que lo que intentaras fuera crear un nuevo dataset para alguna otra cosa.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Busquedas dinamicas

Publicado por BigLuis (713 intervenciones) el 30/05/2008 09:26:32
Probablemente si pero ahora mismo no se si el filtro actua sobre todos los datos de la tabla o solamente los que existen en el dataset. Si es el ultimo caso no sirve por el mismo motivo del locate. Pero en fin estamos demostrando que las posibilidades, como siempre, son muchisimas y depende del gusto o las necesidades de cada uno y de cada caso.
Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Busquedas dinamicas

Publicado por juancho (193 intervenciones) el 30/05/2008 13:04:43
Yeap, el filtro solo funciona con los datos contenidos en el dataset, para mi la mejor forma es hacerlo via query por ejemplo escribiendo el dato en un edit y al oprimir <enter> inciar la consulta, obviamente se tiene que seleccionar la columna de consulta y demas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar