Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Consulta con los valores de varios combos (https://www.clubdelphi.com/foros/showthread.php?t=39769)

fidel 29-01-2007 19:37:56

Consulta con los valores de varios combos
 
Hola:

Base de datos .. FireBird 1.5
DM .. DataModulo
CB .. ComboBox

Tengo tres ComboBox (CBNivel, CBGrupo, CBEtapa), cada combo tiene varios items incluido siempre uno vacio, por ejemplo el combo etapa tiene 3 opciones: ‘’, ESO, Bachillerato.

Para hacer un listado el usuario puede dejar todos los combos con la opción en blanco (en cuyo caso deberían aparecer listados todos los alumnos) o escoger de alguno de ellos un item con algún valor, por ejemplo del combo nivel ‘1º’, del combo etapa ‘Bachillerato’, en cuyo caso deberían aparecer todos los alumnos de 1º de bachillerato (de cualquier nivel).

Para ello hago la consulta de abajo y me funciona cuando todos los combos tienen puesto algún valor para buscar, pero si se deja alguno con la opción en blanco que tienen no funciona.

Me funciona si escojo en los combos por ejemplo:
Nivel: 2º Grupo: A Etapa: ESO (para listar los alumnos de 2º A ESO)

NO funciona si escojo en los combos:
Nivel: Grupo: Etapa: ESO (para listar los alumnos de cualquier nivel, cualquier grupo, ESO)

Código SQL [-]
DM.IBDSAlumnos.Close;

DM.IBDSAlumnos.SelectSQL.Clear;
DM.IBDSAlumnos.SelectSQL.Add('select * from ALUMNOS');
DM.IBDSAlumnos.SelectSQL.Add(' where NIVEL=:QUENIVEL');
DM.IBDSAlumnos.SelectSQL.Add(' and GRUPO=:QUEGRUPO');
DM.IBDSAlumnos.SelectSQL.Add(' and ETAPA=:QUEETAPA');

DM.IBDSAlumnos.ParamByName('QUENIVEL').AsString := CBNivel.Text;
DM.IBDSAlumnos.ParamByName('QUEGRUPO').AsString := CBGrupo.Text;
DM.IBDSAlumnos.ParamByName('QUEETAPA').AsString := CBEtapa.Text;

DM.IBDSAlumnos.Open;

¿Alguna manera de solucionar esto?. Gracias.

Un saludo.

ContraVeneno 29-01-2007 20:01:31

Código Delphi [-]
...
DM.IBDSAlumnos.SelectSQL.Clear;
DM.IBDSAlumnos.SelectSQL.Add('select * from ALUMNOS');
if cbNivel.itemIndex=0 then
 DM.IBDSAlumnos.SelectSQL.Add(' where NIVEL like ''%%''')
else
 DM.IBDSAlumnos.SelectSQL.Add(' where NIVEL=:QUENIVEL')
...

Suponiendo que la opción en blanco sea la primera de tu combo.

fidel 29-01-2007 21:05:43

Hola:

Funciona perfectamente de la manera que me indicas. Me queda así.
Código Delphi [-]
  DM.IBDSAlumnos.Close;

  DM.IBDSAlumnos.SelectSQL.Clear;
  DM.IBDSAlumnos.SelectSQL.Add('select * from ALUMNOS');
  if cbNivel.itemIndex=0 then
    DM.IBDSAlumnos.SelectSQL.Add(' where NIVEL like ''%%''')
  else
    DM.IBDSAlumnos.SelectSQL.Add(' where NIVEL=:QUENIVEL');
  if cbGrupo.itemIndex=0 then
    DM.IBDSAlumnos.SelectSQL.Add(' and GRUPO like ''%%''')
  else
    DM.IBDSAlumnos.SelectSQL.Add(' and GRUPO=:QUEGRUPO');
  if cbEtapa.itemIndex=0 then
    DM.IBDSAlumnos.SelectSQL.Add(' and ETAPA like ''%%''')
  else
    DM.IBDSAlumnos.SelectSQL.Add(' and ETAPA=:QUEETAPA');

  if cbNivel.itemIndex>0 then
    DM.IBDSAlumnos.ParamByName('QUENIVEL').AsString := CBNivel.Text;
  if cbGrupo.itemIndex>0 then
    DM.IBDSAlumnos.ParamByName('QUEGRUPO').AsString := CBGrupo.Text;
  if cbEtapa.itemIndex>0 then
    DM.IBDSAlumnos.ParamByName('QUEETAPA').AsString := CBEtapa.Text;

  DM.IBDSAlumnos.Open;

Muchas gracias.

Un saludo.


La franja horaria es GMT +2. Ahora son las 03:29:01.

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