Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Hacer consultas con muchos filtros posibles (https://www.clubdelphi.com/foros/showthread.php?t=80170)

JairoC 07-09-2012 04:15:06

Hacer consultas con muchos filtros posibles
 
Hola gente del foro!!! Estoy haciendo un sistemita de encuestas.... Y en las consultas no le entiendo mucho...
Por ejemplo quiero que me aparezcan las personas MAYORES a 50, que sean MASCULINAS, QUE NO POSEAN OBRA SOCIAL, ETC... TODOS LOS FILTROS POSIBLES..
Algunos de los campos que tengo son:
EDAD, SEXO, OBRASOCIAL, LIMITACIONPARAVER... Son muchos...

Quisiera que me ayuden... Un saludo!!!

Caral 07-09-2012 04:25:17

Hola
No entiendo cual es la ayuda que necesitas.
Me imagino que tienes un edit o un combobox por cada campo y que dependiendo de se contenido se hara el filtro???
saludos

JairoC 07-09-2012 04:30:29

Perdón, no me expliqué bien.. Así es tengo muchos combobox, uno para cada campo de la base de datos...

Caral 07-09-2012 04:36:01

Hola
Y que necesitas ?
La sentencia sql para el filtro por query ?.
hacerlo por filtro por table ?
No dices que bd usas ni das muchas explicaciones, recuerda, mientras mas expliques mas sencillo sera tratar de ayudar.
saludos

JairoC 07-09-2012 04:40:07

La sentencia para un Query... Uso firebird... uso los dataset, datasourse, query..

Caral 07-09-2012 04:47:35

Hola
para esto necesitas que los combobox esten llenos, osea que todos tengan algun dato, de lo contrario te dara un error:

Código Delphi [-]
    IBQuery1.SQL.Text := 'Select * from TUTABLA where EDAD :E, SEXO = :S, OBRASOCIAL = :O, LIMITACIONPARAVER = :L';
    IBQuery1.Params[0].Value := Combobox1.Text;
    IBQuery1.Params[1].Value := Combobox2.Text;
    IBQuery1.Params[2].Value := Combobox3.Text;
    IBQuery1.Params[3].Value := Combobox4.Text;
    IBQuery1.Open;

esto con cada campo que quieres ver en la consulta.
Espero lo entiendas.
saludos

JairoC 07-09-2012 04:52:02

Si, eso tambien puede suceder de que no selleccione un combobox... Y quiera saber solamente dos parámetros.. A eso quiero llegar de que haya combobox sin elegir...

Caral 07-09-2012 04:55:05

Hola
Primero tendrias que revisar que combobox estan llenos, osea, no en blanco.
despues dependiendo de los que esten llenos revisar a que campo corresponde cada combobox
Luego hacer la consulta especificando solo los que esten llenos, segun su campo.
Dificil, pero no imposible.
Saludos

JairoC 07-09-2012 04:59:10

Si, va ser bastante difícil... POrque es una sistema de encuestas para personas en las cuales lleva muchos campos... Muchas gracias por tu ayuda!!! Voy a poner le código en un botón... Le parece?

Caral 07-09-2012 05:00:57

Hola
Bien.
Saludos

Caral 07-09-2012 05:03:39

Hola
Se me ocurre que podrias crear edits en ejecucion dependiendo de si se modifica (osea cambia) un combobox determinado.
no seri tampoco sencillo pero tal vez mas viable.
Saludos

JairoC 07-09-2012 05:04:01

Saludos! Y gracias por la buena honda!

Caral 07-09-2012 05:09:10

Hola
Pon el codigo del boton, ya es tarde, mañana lo veo.
No te preocupes, aqui hay muchos maestros que te ayudaran mucho mejor que yo.
saludos

JairoC 07-09-2012 17:36:01

Hola Amigo!!! Lo pude solucionar!!! Lo que hice fue lo siguiente:
Creé una variable tipo String, a la cual le asigné una consulta que no se modifica:
Código Delphi [-]
Var
ConsultaGeneral:String
begin
  ConsultaGeneral:=' Select * from Personas'; 
end;
Luego en el botón, lo siguiente:
Código Delphi [-]
with (DM2.General)do
           begin
             if ComboBox_SEXO.Text <>'' then
                ConsultaGeneral:= ConsultaGeneral + ' and SEXO STARTING WITH :SEXO ';
             if Edit_EdadEntre.Text<>'' then
               ConsultaGeneral:=ConsultaGeneral + 'and EDAD BETWEEN :EdadDesde ';
             if Edit_EdadHasta.Text<>'' then
                ConsultaGeneral:=ConsultaGeneral + ' and :EdadHasta ';
             if ComboBox_Cobertura.Text<>'' then
                ConsultaGeneral:=ConsultaGeneral + 'and COBERTURA starting with :Cobertura';
              SQL.Clear;
             sql.Add(ConsultaGeneral);
             if ComboBox_SEXO.Text <>'' then
                ParamByName('Sexo').Value:=ComboBox_SEXO.Text;
            // Y ASÍ CON TODOS LOS QUE TENGO
            Open;

MUchas gracias de nuevo por su ayuda!!! Abrazos!!!

Caral 07-09-2012 23:00:30

Hola
Yo usaria combobox en todos
Saludos


La franja horaria es GMT +2. Ahora son las 22:06:01.

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