Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Forma correcta de hacer busqueda incremental (https://www.clubdelphi.com/foros/showthread.php?t=86292)

giulichajari 15-07-2014 20:46:36

Forma correcta de hacer busqueda incremental
 
Hola amigos, para realizar una busqueda incremental en un edit hay que tener una grilla para filtrar resultados similares no cierto?

Siempre se dice que utilizar un combo es pesado, pero pregunto¿no es igual de pesado llenar la grilla y hacer el filtro en el edit?
no se puede hacer una busqueda incremental tipo combo que vaya apareciendo abajo solo los nombres de clientes por ejemplo?

ecfisa 15-07-2014 23:22:40

Hola giulichajari.

Las búsquedas incrementales son intrínsecamente "pesadas" sea que se implementen a través de un TComboBox u de otro componente. Ya que por cada caracter ingresado, se envía una consulta. Y si es através de un servidor, tiene el plus de un incremento sustancial en el tráfico de red.

Cita:

pero pregunto¿no es igual de pesado llenar la grilla y hacer el filtro en el edit?
No.

Se puede decir que los controles de datos tales como el TDBGrid son manifestaciones visuales de los contenidos de una tabla o consulta. Es decir que están relacionados con un TDataSet y esto último hace la diferencia, por que el TDataSet mantiene una caché interna de los datos actualmente mostrados. Ese valor lo podes obtener de la propiedad BufferCount.

Además, usar un TComboBox implica una carga prévia de los datos a visualizar para la selección. De otro modo no habría diferencia de uso entre él y un TEdit...

Saludos :)

juanelo 15-07-2014 23:30:05

Para mi depende del volumen de datos a filtrar, la tecnica a usar.

Neftali [Germán.Estévez] 16-07-2014 10:02:15

Cita:

Empezado por giulichajari (Mensaje 479026)
...para realizar una busqueda incremental en un edit hay que tener una grilla para filtrar resultados similares no cierto?

En realidad son 2 cosas. Por un lado hay que distinguir entre la fuente de datos (que podemos ver como una tabla/query) y luego de forma independiente el componente que utilices para filtrar (edit, combo, grid,...).
Cuando hablas de "grilla" no se si te refeieres a eso.

Cita:

Empezado por giulichajari (Mensaje 479026)
Siempre se dice que utilizar un combo es pesado, pero pregunto¿no es igual de pesado llenar la grilla y hacer el filtro en el edit?
no se puede hacer una busqueda incremental tipo combo que vaya apareciendo abajo solo los nombres de clientes por ejemplo?

Lo pesado es realidad no es el combo, como tú bien dices, es igual de pesado hacerlo sobre un Edit o sobre un Grid. Es lo mismo porque en realidad la parte "pesada" no está en el componente, sino en la parte de los datos. Por lo tanto, el componente que uses para hacerlo es independiente.

Personalmente tampoco soy partidario de hacerlas, salvo que estemos hablando de tablas pequeñas que se puedan cargar fácilmente en memoria.

giulichajari 16-07-2014 14:00:59

Gracias a todos por las respuetas.

Y ecfisa si dices:

Cita:

Se puede decir que los controles de datos tales como el TDBGrid son manifestaciones visuales de los contenidos de una tabla o consulta. Es decir que están relacionados con un TDataSet y esto último hace la diferencia, por que el TDataSet mantiene una caché interna de los datos actualmente mostrados. Ese valor lo podes obtener de la propiedad BufferCount.
Entonces hay que filtrar los datos de la grilla que ya estan mostrados, y no el query que pertenece a la grila, porque sino lo estas ejecutando de vuelta al query.
Y si la busqueda no es incremental para el nombre de cliente por ejemplo: deberia ordenar alfabeticamente y que el cliente se desplaze y encuentre el nombre.
Saludos

Caminante 16-07-2014 20:22:06

Hola

Cita:

Empezado por giulichajari (Mensaje 479050)
Entonces hay que filtrar los datos de la grilla que ya estan mostrados, y no el query que pertenece a la grila, porque sino lo estas ejecutando de vuelta al query.
Saludos

Como te dijeron los datos los posee el dataset (en este caso el query), la grilla solo es una vista virtual de los mismos (La grilla no posee ningun dato solo muestra los del query).

Saludos


La franja horaria es GMT +2. Ahora son las 23:41:53.

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