FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
¿Que tipo de búsqueda me conviene en ABM?
Hola club!, estoy comenzando mi tesis para recibirme y el trabajo final es hacer un sistema. Para los ABM estoy utilizando un form con una grilla, la cual tiene los botones Nuevo, Eliminar, Editar, que llevar a un segundo formulario (creo que esta es la manera típica que implementan la mayoría de los programadores) Necesito en la ventana de la grilla implementar un método de búsqueda. Imagino que debería ser un text box donde el usuario ingrese un dato y si existe el cursor se posicione en la grilla, marcando el registro. El problema es que hay varias formas de buscar los datos, necesitaría que me recomendaran cual seria la mas adecuada para este caso.
Utilizo los componentes ADODataSet. Seria bueno quizás poder ver como lo hace algún sistema echo en Delphi, ya que este dato de búsqueda no debería ser fijo. El usuario debería poder elegir porque dato quiere buscar. Ademas, tendría que poder buscar los próximos resultados coincidentes y los anteriores. Escucho consejos. Muchas gracias. |
#2
|
||||
|
||||
En nuestro 'FTP' tienes programas completos que te pueden servir de ayuda.
|
#3
|
||||
|
||||
¿A que te refieres cuando dices Tipo de búsqueda?
De lo que dices, todo se resume a un consulta SQL como
Luego el conjunto de datos devuelto queda en el DataSet y será mostrado en un DBGrid si los enlazas con el respectivo DataSource. Tan simple como eso, o es que yo no entiendo el rollo. Ahora si tu de dicho consulta pretendes localizar o refinar más las cosas, tienes a disposición el método Locate() o también de la posibilidad de filtrar gracias a Filter y Filtered. Pero ya sea cualquiera de estas dos alternativas, se pueden reemplazar y hacerlo vía sql añadiendo las debidas condiciones necesarias para ello:
Cuanto más filtrado se regresen los datos mejor. En el único escenario que imagino "tipos" de búsqueda es que se te ocurra traerte todos los datos (repito, lanzando un SQL), y abandonar el uso de Filtros y/o Locates() e irte por la implementación de tus propios algoritmos de búsqueda. De lo que según yo recuerdo por las clases de Estructura de Datos, solo hay dos posibilidades: Búsqueda secuencial y/o Búsqueda Binaria. El 1ro recorre el conjunto de datos evaluando elemento a elemento, el segundo sólo aplica cuando se tiene la seguridad de que los datos están ordenados (lo que nos llevaría a que la consulta SQL tenga una cláusula ORDER BY) y lo que hace es buscar en base a un elemento pivote (generalmente el elemento central) y decidir repetir la búsqueda de forma recursiva en la primera o segunda mitad del conjunto. Saludos, |
#4
|
||||
|
||||
Creo que el camino va por donde indica Delphius. Deberás generar una sentencia SQL y de forma dinámica variar el filtro (la parte del WHERE) según el campo por el que esté buscando y el valor.
A ver si esta entrada te puede servir. en este caso no se usa SQL, sino la propiedad Filter, pero puedes echarle un vistazo porque también te puede ser útil. Además trabaja con ADO. Esto no acabo de entenderlo y tal vez deberías explicarlo mejor, porque no lo veo trivial.
__________________
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
|
||||
|
||||
Cita:
Esto era lo que se acostumbraba antes, cuando se usaban bases de datos tipo Access o Paradox. Pero realmente no tiene mucho caso presentar al usuario cientos o miles de registros, de los cuáles sólo examinará unos cuantos. Es más adecuado -en mi opinión- presentar una ventana de búsqueda y mostrar sólo los registros encontrados. De esta forma te evitas, además, implementar la lógica de ir "siguiendo" los diferentes resultados. En una aplicación, por ejemplo, tengo esta ventana: Aquí, el usuario escribe en un campo o varios de la parte superior y oprime el botón "Buscar". La búsqueda construye una consulta SQL usando AND y LIKE para los campos:
Los resultados coincientes -y sólamente éstos- se presentan en la rejilla de abajo. // Saludos |
#6
|
||||
|
||||
En este hilo se habló sobre pantallas de búsqueda y puedes ver más pantallas, así hacerte una idea.
|
#7
|
||||
|
||||
Como que sentí feo que pongo mi pantalla y lo mandas a buscar otras ¿eh?
Je, je, es broma // Saludos |
#8
|
||||
|
||||
Quisiera sacar unas Dudas con respecto a los comentarios de Delphius y Neftali, creo que se puede hacer consulta dinámicas usando los componentes ADO. La duda me viene que cada ves que se ejecute la consulta dinámica este va al servidor y recién se compila ahí, no nos permite la opción de poder configurar INDICES, etc para que las consultas sean mas optimas.
Capaz he mal interpretado lo comentado. Seria bueno aclararlo. Saludos. Maniche |
#9
|
||||
|
||||
Cita:
|
#10
|
||||
|
||||
En mi caso cuando hablo de consultas dinámicas, me refiero a consultas SQL que "montas" en el momento y que no están almacenadas. Por lo tanto, eso se puede hacer con cualquier componente.
En el caso de los SGBD's, el propio SGBD es el que se encarga de utilizar los índices necesarios si los tienes para optimizar las consultas. En las Bases de datos antiguas y de escritorio, era el usuario quien seleccionaba los índices a utilizar. Actualmente los sistemas "serios" generan el plan de ejecución de las consultas para minimizar tiempos, y para eso utilizarán índices si los tienen definidos.
__________________
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. |
#11
|
||||
|
||||
Cita:
Algunas veces, viendo pantallas de lo que uno quiere hacer, se entiende mejor |
#12
|
||||
|
||||
Cita:
Hola Roman!, Me gusto esta idea. Como estas haciendo la sentencia? ¿Concatenas por código los valores de los edit en la propiedad CommandText de los data set? y en el caso de que quiera buscar solo por uno de los campos, como trabajas con eso?. Te pregunto esto porque quiero hacer lo mismo. Saludos!!! |
#13
|
||||
|
||||
Hola,
Lo que tengo es una consulta de este tipo:
Al momento de ejecutar la consulta, sustituyo los parámetros de esta manera:
El usuario, si quiere, puede introducir el comodín % en sus edits para coincidencias parciales, pero si deja en blanco un edit, yo le pongo el comodín para que así ese campo realmente no forme parte de la condición (la comparación campo like '%' siempre será true). De esta manera, el usurio puede buscar por uno o más campos, sin tener que especificar con un botón de radio o una lista de selección múltiple u otros artilugios, los campos que deben incuirse en la búsqueda; además de que, como tal, la consulta SQL es fija, si necesidad de construirla al vuelo. // Saludos |
#14
|
||||
|
||||
Cita:
Bueno saludos Roman y muchas gracias. |
#15
|
||||
|
||||
Bueno, el modelo de consulta que te puse es para el caso específico de la pantalla que te mostré. Si hay campos numéricos, quizá dependa un poco de la base de datos que uses. En el caso de MySQL, un campo, aun siendo númerico, puede asignarse su valor como si fuera string. O se que no habría diferencia en el código expuesto.
Pero creo que hay bases de datos en que asignar un valor string un campo numérico puedes ser causa de error, aunque el string represente un número. Tendrías que probar. // Saludos |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
busqueda tipo explorador | josi | Varios | 2 | 02-02-2009 17:57:58 |
Problema con búsqueda en campo tipo MONEY | micki | MS SQL Server | 3 | 19-07-2007 17:10:59 |
que CVS me conviene?? | pvizcay | Varios | 6 | 18-09-2006 21:17:58 |
Que tipo de reporte me conviene | Gustavo Gowdak | Impresión | 3 | 21-08-2006 21:55:56 |
Busqueda en campos tipo timestamp | gescoto99 | SQL | 1 | 14-07-2005 12:17:16 |
|