Jump to content


Photo

Obtener elementos únicos en Combobox


  • Please log in to reply
4 replies to this topic

#1 maxzama

maxzama

    Newbie

  • Miembros
  • Pip
  • 8 posts

Posted 30 January 2015 - 08:38 AM

hola.

Herramientas:

- Delphi xe2
- Firebird  (IBexpert)

Tengo una tabla llamada(datos), que  el campo clave es año. los sigientes campos, de esta tabla es Mes, Semana, Nombre.

Problema:

En mi pantalla tengo 3 combobox. Necesito que al seleccionar el año que seria(Combobox1), me salga los datos del campo mes en el(Combobox2), sin repetir el mismo dato ( es decir: Ejemplo1) . Y al seleccionar mes, me salga el campo semana en el(Combobox 3) sin repetir el mismo dato.

Ejemplo1: Se registra a cada nombre: un año, un mes, una semana(y cada mes tiene 3 semana, asi que se ingresa semana1, semana 2, semana3 del mes de enero. semana 4, semana 5, semana 6 del mes de febrero, etc.).

Y una semana tiene 50 nombre.  // Asi que no quiero que redunde la misma palabra 50 veces.ej: enero, enero, etc...

Asi como lo muestro en la imagen. //Como como hago en este caso...

  combobox1 [  2015    ]          Combobox2 [  Enero    ]
                                                                          Enero
                                                                          Enero
                                                                          Febrero
                                                                          Febrero

Codigo:

[DELPHI]begin
    combobox6.Clear;
      Dmodulo.Ano.SQL.Clear ;
      Dmodulo.Ano.SQL.Add('select * from ANOS where ANO=:A');
      Dmodulo.Ano.ParamByName('A').Value:=combobox5.Text;
      Dmodulo.Ano.Open;
      Edit6.Text:=Dmodulo.Ano.FieldByName('ANO').Value;


    Dmodulo.Reporte_Cobrado.SQL.Clear ;
        Dmodulo.Reporte_Cobrado.SQL.Add('select * from REPORTE_COBRADO where ANO=:A');
        Dmodulo.Reporte_Cobrado.ParamByName('A').Value:=Edit6.Text;
        Dmodulo.Reporte_Cobrado.Open;
        Dmodulo.Reporte_Cobrado.First;
            while not Dmodulo.Reporte_Cobrado.Eof do
                  begin                                          // <>Combobox5.AddItem['']
                      if (DModulo.Reporte_Cobrardo.FieldByName('Mes').AsString = Combobox5.text) then
                      begin


                      end
                      else
                      begin
                          combobox6.Items.Add(DMODULO.Reporte_Cobrado.FieldByName('Mes').AsString) ;
                      end;
                      Dmodulo.Reporte_Cobrado.Next;
                  end;
end;[/code]

Espero sus respuesta por favor y gracias...
  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14469 posts
  • LocationMéxico

Posted 30 January 2015 - 09:41 AM

Hola

Hay varias opciones, pero la que a mi me parece más fácil es obtener los meses del año desde la consulta SQL.



sql
  1. SELECT DISTINCT mes FROM REPORTE_COBRADO WHERE ANO=:A



Las otras las puedes encontrar googleando un poco.

Saludos

  • 0

#3 maxzama

maxzama

    Newbie

  • Miembros
  • Pip
  • 8 posts

Posted 30 January 2015 - 11:25 AM

Gracias, por tu ayuda.

Otra pregunta, pero tiene algo relacionado con el tema:

para poder utilizar la funcion, Obtener elementos únicos en el Combobox (Que es el codigo que me mostraste).

Tengo que colocar un solo campo(Mes), en el Fields Editor del IBquery(para que me muestre los datos sin repetir).

// IBquery: lo utilizo para conectarme a la tabla de la base de dato(REPORTE_COBRADO)

El problema es:

Como hago, Que al seleccionar mes : Me muestre en el DBGrid los siguientes campos del mes y el año que seleccione: Nombre, cedula. // porque para que me muestre nombre y cedula tengo que agregarlo en el Fields Editor del IBquery. Y repito si lo agrego no me ase la funcion (del coigo que me diste). 
  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14469 posts
  • LocationMéxico

Posted 30 January 2015 - 11:33 AM

Gracias, por tu ayuda.

Otra pregunta, pero tiene algo relacionado con el tema:

para poder utilizar la funcion, Obtener elementos únicos en el Combobox (Que es el codigo que me mostraste).

Tengo que colocar un solo campo(Mes), en el Fields Editor del IBquery(para que me muestre los datos sin repetir).

// IBquery: lo utilizo para conectarme a la tabla de la base de dato(REPORTE_COBRADO)

El problema es:

Como hago, Que al seleccionar mes : Me muestre en el DBGrid los siguientes campos del mes y el año que seleccione: Nombre, cedula. // porque para que me muestre nombre y cedula tengo que agregarlo en el Fields Editor del IBquery. Y repito si lo agrego no me ase la funcion (del coigo que me diste).


Bueno, si agregas mas campos a la consulta el resultado será diferente, te mostrará todos los registros que no se repitan, por ejemplo

ENERO NOMBRE 1 CEDULA1
ENERO NOMBRE 1 CEDULA1
ENERO NOMBRE 1 CEDULA2
ENERO NOMBRE 1 CEDULA3
ENERO NOMBRE 1 CEDULA4
ENERO NOMBRE 2 CEDULA1
ENERO NOMBRE 2 CEDULA1
ENERO NOMBRE 2 CEDULA1

La consulta te mostrará lo siguiente

ENERO NOMBRE 1 CEDULA1
ENERO NOMBRE 1 CEDULA2
ENERO NOMBRE 1 CEDULA3
ENERO NOMBRE 1 CEDULA4
ENERO NOMBRE 2 CEDULA1

Espero ser claro.

Saludos
  • 0

#5 maxzama

maxzama

    Newbie

  • Miembros
  • Pip
  • 8 posts

Posted 30 January 2015 - 12:52 PM

Gracias. e aprendido algo nuevo.
  • 0




IP.Board spam blocked by CleanTalk.