Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-12-2006
nachito_tuc nachito_tuc is offline
Miembro
 
Registrado: jul 2006
Ubicación: Tucuman
Posts: 17
Poder: 0
nachito_tuc Va por buen camino
Filter vs consulta SQL

Hola. Estoy haciendo una busqueda en una tabla de esas que van apareciendo los resultados a medida que uno teclea, en un dbgrid.
Lo trate de hacer antes con una tabla y mediante filter, pero tuve muchos problemas con las sintaxis por lo que opte por hacerlo con un select like. Ahora mi duda es si cual de los dos metodos es mas optimo, ya que hacerlo mediante un select por cada tecla que presiono implica realizar una consulta a la base de datos por cada tecla, lo cual pienso no debe ser lo mejor, o tal vez sea lo mismo en cuanto a velocidad y rendimiento que mediante el filter.
Alguien me podría contestar esto?

Saludos

Nacho
Responder Con Cita
  #2  
Antiguo 21-12-2006
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
Supongo igual que tu, debe ser mas optimo para tu caso, utilzar filter antes que una nueva consulta SQL.
__________________
[Crandel]
Responder Con Cita
  #3  
Antiguo 21-12-2006
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.282
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Creo que en general, lo más óptimo para este caso es traer todos los datos y hacer los filtros en local; Eso también será más ágil de cara al usuario cuando va escribiendo. Para tablas pequeñas, bien.

La excepción es cuando la tabla es grande, en ese caso yo desecharía esa opción (búsqueda incremental) y optaría por utilizar una pantalla de filtro con uno o varios campos antes de realizar la consulta SQL.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 21-12-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Por tu duda parece un campo que guarda el Nombre del cliente / proveedor con la función de Autocompletar.

Otra Solución de escritorio es mapear los registros en un StringList (digamos durante la inicialización del programa) después de insertar / borrar / modificar en la tabla, haces lo mismo en el StringList (sin recargar todos los proveedores de nuevo, solo añadiendo el nuevo), así puedes sincronizar los datos sin sobrecargar a la base de datos.

De vez en cuando se haría necesario la sincronización (recargar TODOS los proveedores de nuevo), ¿mediante un botón?.

Con 5.000 registros tarda 300 milisegundos en mi caso (es aceptable ya que la tabla no tendrá más de 5.000 registros).

Quizás se podría optimizar pensando en el futuro, dejando los proveedores menos usados sin mapear.

Cuando he dicho "solución de escritorio", me refiero a programas monousuarios, obviamente en un entorno de red no podríamos usar esto.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #5  
Antiguo 21-12-2006
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.282
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Lepe
Otra Solución de escritorio es mapear los registros en un StringList (digamos durante la inicialización del programa) después de insertar / borrar / modificar en la tabla, haces lo mismo en el StringList (sin recargar todos los proveedores de nuevo, solo añadiendo el nuevo), así puedes sincronizar los datos sin sobrecargar a la base de datos.
Si los registros ya están en local, creo que no es necesario.
Hay DBGrids que lo hacen en local, y sino la búsqueda en un DataSet local utilizando un índice debería ser más o menos igual. En ambos casos, si es un campo clave (y StringGrid ordenado) acabará haciendose una búsqueda dicotómica.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 22-12-2006
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
OJO:

Esto funciona muy bien siempre y cuando:

1.- Traigas todos los datos de un golpe
2.- Los datos se encuetren en Local o al menos en la misma red.

Intentalo via IP o WAN y entonces tendrás una lentitud de dolor de cabeza, si traes todos los datos y son miles...imaginate lo que tardara en cargar...si no cargas todos y vas haciendo un SELECT cada que escribes un caracter...igual.

Sugerencia:

Si es una aplicacion remota no uses este concepto del speedsearch, mejor usa el de que el usuario escriba unas cuantas letras del nombre que quiere buscar y haces un "select ....like %dato%" trayendo solo los registros que se parezcan, lo muestras en una lista y el usuario selecciona de ahi. Es más rápido y pontente ya que en el caso que mencionas tiene que escribirse correctamente y en el mismo orden las palabras por ejemplo:
el regitro:
"COMPAÑIA MEXICANA DE VALORES"
para hallarlo con speed search tendria que escribir
"COMPAÑIA MEX"
con el otro esquema:
"MEXICANA DE VAL"
"DE VALORES"
"VALORES"
Nos devolverá una lista donde aparecerá el registro que queremos (incluso solo ese si no coincide otro mas).
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #7  
Antiguo 25-12-2006
nachito_tuc nachito_tuc is offline
Miembro
 
Registrado: jul 2006
Ubicación: Tucuman
Posts: 17
Poder: 0
nachito_tuc Va por buen camino
re: a varios

Respondo a varios a la vez:
1-El sistema va a funcionar en forma local, tal vez a travez de una red, pero una red LAN.
2-Lepe me entendio mal, no es una lista con los mas usados sino una busqueda cuando no quieres ingresar el codigo.
3-En cuanto a Azidrain, es exactamente asi como lo estoy haciendo. La consulta tiene un %usuario% y voy filtrando incrementalmente los resultados (en realidad no filtrando, sino haciendo un select en el evento change del control).

El problema que tuve con el filter, es que no aceptaba la misma sintaxis que utilizo para la consulta SQL y me daba error al utilizar %criterio%

Saludos

Nacho
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Locate o Filter jre740824 SQL 3 17-11-2006 11:17:35
Uso de filter CONY Conexión con bases de datos 1 02-08-2006 22:48:23
Filter en IBQuery StartKill Firebird e Interbase 1 27-08-2005 06:51:06
problema con filter superhopi Varios 9 05-06-2003 13:52:45
Duda con filter... superhopi OOP 1 21-05-2003 10:00:04


La franja horaria es GMT +2. Ahora son las 19:02:34.


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
Copyright 1996-2007 Club Delphi