Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   como crear una busqueda mediante diversos parametros (https://www.clubdelphi.com/foros/showthread.php?t=55078)

metroyd 07-04-2008 21:13:34

como crear una busqueda mediante diversos parametros
 
Hola que tal. Tengo un problema en el modulo de consultas de mi aplicacion. En una tabla llamada SERVICIO tengo algunos campos (id_progresivo,region,municipio,localidad,tipo_escuela,fecha_atencion,subsistema.etc, etc, etc). Quiero un formulario donde cada campo sea representado por un ComboBox y asi, el usuario elija que registros buscar. Ahora, el usuario puede elegir varios criterios de busqueda mediante los comboBox, puede usar la combinacion de mas de dos para realizar su busqueda. Por ejemplo: Buscar las escuelas que son de tipo XXXXX y que fueron atendidas en X dia. O tambien, Buscar las escuelas De tipo XXXX, que son de esta localidad, y que fueron atendidas XXX dias.
Entonces, quiero que el usuario sea capaz de hacer esto. Y por ultimo, en el formulario, tener unos botones de checkbox(para poner palomitas en el cuadrito) para que el usuario elija que campos desea que sean visualizados. Ya por ultimo el boton de buscar, que realizara la busqueda y la presentara en un DBGrid. Y pues tambien la opcion de imprimir. Utilizo ADOConnection. Espero su ayuda, gracias

jachguate 08-04-2008 02:46:31

¿Y la pregunta es?
:confused: :confused: :confused:

darkerbyte 08-04-2008 06:39:46

Muchos problemas, una solución!
 
Cita:

Empezado por metroyd (Mensaje 278097)
Hola que tal. Tengo un problema en el modulo de consultas de mi aplicacion. En una tabla llamada SERVICIO tengo algunos campos (id_progresivo,region,municipio,localidad,tipo_escuela,fecha_atencion,subsistema.etc, etc, etc). Quiero un formulario donde cada campo sea representado por un ComboBox y asi, el usuario elija que registros buscar. Ahora, el usuario puede elegir varios criterios de busqueda mediante los comboBox, puede usar la combinacion de mas de dos para realizar su busqueda. Por ejemplo: Buscar las escuelas que son de tipo XXXXX y que fueron atendidas en X dia. O tambien, Buscar las escuelas De tipo XXXX, que son de esta localidad, y que fueron atendidas XXX dias.
Entonces, quiero que el usuario sea capaz de hacer esto. Y por ultimo, en el formulario, tener unos botones de checkbox(para poner palomitas en el cuadrito) para que el usuario elija que campos desea que sean visualizados. Ya por ultimo el boton de buscar, que realizara la busqueda y la presentara en un DBGrid. Y pues tambien la opcion de imprimir. Utilizo ADOConnection. Espero su ayuda, gracias

Pues la mejor solución es que contrates a alguien que sepa programar bien y que te resuelva el problema.
Pides muchas cosas y no eres muy específico.
Que SGBD estas utilizando?
En lugar utilizar un ComboBox, debes utilizar un Dbcombobox, de hecho un lookup si deseas que te muestre un texto que referencíe a otro valor.
Por cierto, la mayoría de los que entramos aquí sabemos que es un "checkbox" y no necesitas decirnos que es.
Utiliza los mismos controles que has mencionado para ir formando una Query, y mandala a tu servidor, usa un DataSource para ligar el resultado de tu Query a tu DBGrid, y bueno, el imprimir es otra cosa, busca en el foro acerca de Quickreport.
Te recomiendo que leas la guia de estilo.

kuan-yiu 08-04-2008 09:08:56

Casi todos mis formularios de selección son así y lo que hago es reconstruir la consulta cada vez. Simplemente con varios if-else consecutivos para ir añadiendo las condiciones que necesito en cada ejecución.

Claro que yo no uso ADO.

Delphius 08-04-2008 15:23:27

Hola yo tiendo a pensar demasiado en POO, al punto de llegar a ponerme en una situación "Purista".
A mi modo de ver, no veo nada malo e que para estos casos se pueda emplear un pequeño "motor" o generador de expresiones SQL en una clase.

Puede que la idea de Lepe inspire a metroyd.

Considero que debe rechazarse un análisis desde el punto de vista de la Capa Interfaz y abordar el problema desde el plano lógico (que es donde realmente está el lio).

Saludos,

metroyd 08-04-2008 16:31:43

Cita:

Empezado por kuan-yiu (Mensaje 278212)
Casi todos mis formularios de selección son así y lo que hago es reconstruir la consulta cada vez. Simplemente con varios if-else consecutivos para ir añadiendo las condiciones que necesito en cada ejecución.

Claro que yo no uso ADO.

ME podrias ayudar:confused:

metroyd 08-04-2008 16:34:43

Claro, el problema que tengo es generar consultas en tiempo de ejecucion, y cheque el link que pusieron por ahi pero creo que esta en un nivel demasiado avanzado a comparacion mia :(
Gracias de cualquier forma

Delphius 08-04-2008 17:16:22

metroyd,
Primeramente debe establecer hasta que punto pretendes que sea flexible el armado de las consultas.

La manera más sencilla de conseguir lo que deseas hacer es tener una serie de variables en donde registres las opciones que elija el usuario. El SQL se compondrá entonces de la concatenación de dichas opciones.

Por ejemplo podrías tener algo así:

Código Delphi [-]
var
StrTabla1, StrTabla2, StrOpeador, StrCampo1, StrCampo2: string;

Y por ejemplo suponer que en un OnChage de un Combo para seleccionar una condición hacer algo como esto:
Código Delphi [-]
if Combo.ItemIndex = 0
   then StrOperador := 'OR'
   then StrOperador := 'AND';

Y hacer por ejemplo en un OnClick de un botón algo como esto:

StrSQL := 'select from ' + StrTabla1 + StrCampo1 + ' where ' + StrCampo1 + ' ' + StrOperador + ' ' + StrCampo2;

Para "confirmar" la consulta.

Y para ir finalizando hacer algo como:
Código Delphi [-]
Query.sSql := StrSQL;

Para asociar la consulta generada.

¿Me explico?
Como te he dicho antes... necesitas definir que tan flexible serán tus consultas. Dependiendo de ello puede que se logren hacer más o menos fácil estructurar los anidamientos y las series de IFs...

Hay muchas maneras de conseguir lo que buscas.

Creo que lo que te dicho te puede servir de orientación. Como podrás comprender el problema no es de interfaz sino de lógica, necesitarás sentarte un rato para saber armar las condiciones. Ten presente que es posible que algunas condiciones que elija el usuario pueden no ser compatibles, por ello cuando armes el SQL deberás preveer algunas condiciones.

Saludos,

metroyd 08-04-2008 23:41:24

Cita:

Empezado por Delphius (Mensaje 278292)
metroyd,
Primeramente debe establecer hasta que punto pretendes que sea flexible el armado de las consultas.

La manera más sencilla de conseguir lo que deseas hacer es tener una serie de variables en donde registres las opciones que elija el usuario. El SQL se compondrá entonces de la concatenación de dichas opciones.

Por ejemplo podrías tener algo así:

Código Delphi [-]var StrTabla1, StrTabla2, StrOpeador, StrCampo1, StrCampo2: string;


Y por ejemplo suponer que en un OnChage de un Combo para seleccionar una condición hacer algo como esto:
Código Delphi [-]if Combo.ItemIndex = 0
then StrOperador := 'OR' then StrOperador := 'AND';


Y hacer por ejemplo en un OnClick de un botón algo como esto:

StrSQL := 'select from ' + StrTabla1 + StrCampo1 + ' where ' + StrCampo1 + ' ' + StrOperador + ' ' + StrCampo2;

Para "confirmar" la consulta.

Y para ir finalizando hacer algo como:
Código Delphi [-]Query.sSql := StrSQL;


Para asociar la consulta generada.

¿Me explico?
Como te he dicho antes... necesitas definir que tan flexible serán tus consultas. Dependiendo de ello puede que se logren hacer más o menos fácil estructurar los anidamientos y las series de IFs...

Hay muchas maneras de conseguir lo que buscas.

Creo que lo que te dicho te puede servir de orientación. Como podrás comprender el problema no es de interfaz sino de lógica, necesitarás sentarte un rato para saber armar las condiciones. Ten presente que es posible que algunas condiciones que elija el usuario pueden no ser compatibles, por ello cuando armes el SQL deberás preveer algunas condiciones.

Saludos,

Si gracias, por eso. Y la razon por las que quiero que sean asi, es porque el usuario, antes de tener el sistema que le voy a proponer, tenia su base de datos en Excel, y estaba configurado de esta manera. En la parte de la fila de los encabezados (titulos de columnas) estaba el titulo y una flechita, en donde podias desplegar todos los datos, y asi, al seleccionar uno, se iban generando las busquedas automaticamente. Es por eso que yo lo quiero manejar asi.


La franja horaria es GMT +2. Ahora son las 17:37:30.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi