FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Busqueda en la BD a partir de un texto tecleado
Hola amigos.
El siguiente código lo utilizo para seleccionar registros dentro de una tabla contenida en una TDBGrid y situarnos en la primera coincidencia. Dos controles: edt_TablaBuscar (TEdit) y box_TablaBuscar (TComboBox). Este último con ITems = '','Empieza', 'Contiene', 'Termina'. A medida que se escribe en edt_TablaBusca se ejecuta edt_TablaBuscarChange y si se cambia la propiedad Item de box_TablaBuscar se ejecuta box_TablaBuscarChage. La variable UltimoCampo contiene el campo por el que se busca. Se asigna a partir del TDBGrid cuando se pincha en titulo.
Hasta aqui todo bien. El código funciona y, aunque estoy pensado en algunas mejoras, no me ha dado problemas a lo largo del tiempo. Sin embargo adolece de un defecto y es que la tabla debe estar cargada en memoria, lo cual es un proble cuando hay decenas o centenares de miles de registros. Y aquí va la pregunta, ¿cómo prodría hacerse algo parecido pero tirando de la BD directamente?. Es decir, pidiéndole a Firebird que devuelva las fihas que cumplan las condiciones indicadas en cada caso, teniendo en cuenta que debe valer para cualquier tabla y para cualquier campo de ella. Gracias anticipadas. |
#2
|
||||
|
||||
Hola.
Cita:
Saludos.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#3
|
|||
|
|||
Gracias ecfisa. Lo miraré ahora mismo.
|
#4
|
||||
|
||||
Empezaré respondiendo la última.
Cita:
Cita:
Ya lo he comentado otras veces. El comportamiento que estás utilizando corresponde a una Base de Datos "local" o de "escritorio". Las que usábamois antiguamente y en las que todos los datos se cargaban en memoria. Podías recorrer todos los datros para hacer búsquedas y era cómodo realizar búsquedas "a medida que el usuario iba escribiendo" (porque todos los datos estaban en memoria). Hoy en día que trabajamos con SGBD's (Servidores de Bases de Datos) no con Bases de Datos de escritorio este comportamiento no es óptimo. Justo por lo que comentas: (1) Porque para hacerlo debes cargar TODOS los datos en memoria, cosa que puede ser muy ineficiente. (2) Porque estás generando muuucho más tráfico del necesario. (3) porque estás sobrecargando el servidor más de lo necesario. Si alguien quiere buscar por valores que empiezen por "Barcel", por ejempo, al escribir ese texto, estará realizando 6 búsquedas (B, Ba, Bar, Barc, Barce y Barcel) cuando realmente sólo le interesa la última. Ya no digo nada si el usuario es torpe escribiendo y entre medio escribe 2 letras mal, luego las borra y las vuelve a escribir . Cita:
Ejecutar la búsqueda de forma explícita por el usuario.
__________________
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. |
#5
|
|||
|
|||
Gracias Neftalí.
Efectivamente, no es nada eficiente la búsqueda en la BD con cada pulsación de tecla cuando las tablas no está cargadas en memoria. Ya estaba mirando la posibilidad que comentas, me refiero a lanzar la búsqueda en un determinado momento, pero antes de cambiar nada quería tener la seguridad de que no había otra forma de hacerlo que desconocía, sobre todo cuando tienes que 'lidiar' con todo tipo de usuario: los que comprenden que se introduzcan cambios y los que no lo harán nunca. Gracias. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Mostrar texto de un DBMemo a partir de un caracter | exequielmatias1 | Varios | 6 | 21-08-2013 16:01:04 |
Crear Imagen A Partir De Texto (x,y,z) | gusspagano | Gráficos | 17 | 23-10-2012 22:49:33 |
Busqueda de texto | Gerson12 | Varios | 40 | 05-08-2012 20:55:43 |
Crear un Reporte a partir de archivos de texto | franciscobucio | Impresión | 4 | 18-01-2007 18:49:09 |
Se puede optener un listado de direcciones a partir de una busqueda? | Alfredo | Internet | 3 | 19-10-2005 16:10:31 |
|