Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Obtener elementos únicos en Combobox (https://www.clubdelphi.com/foros/showthread.php?t=87610)

maxzama 30-01-2015 15:40:49

Obtener elementos únicos en Combobox
 
1 Archivos Adjunto(s)
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...

Archivo Adjunto 3112

Codigo:

Código 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;

Espero sus respuesta por favor y gracias...

ecfisa 30-01-2015 17:16:27

Hola maxzama.

Al ser año el campo clave (clave primaria) como mencionas, sólo podrá existir un año por registro. Por lo que es mas simple usar un TDBLookupComboBox relacionado al campo año y tres TDBEdit en relación con los restantes campos.

Es decir, el combo deberá tener como valor en sus propiedades ListField y KeyField el nombre del campo "ANIO". Y los tres dbedits en sus respectivas propiedades DataField, los nombres de los campos "MES", "SEMANA" y "NOMBRE".

De ese modo, al seleccionar el año en el combo, automáticamente quedarán determinados los campos correspondientes.

Saludos :)

maxzama 30-01-2015 18:42:16

Estoy utilisando DBLook y DBCombobox(para los siguientes campos).

y al seleccionar el año, deberia mostrarme los meses de ese año(de los que estan registrado), y al seleccionar el mes deberia mostrarme las semanas del mes seleccionado.

Pero aparece el siguiente error, al seleccionar el año.

Error Sistema: Could not convert variant of type (null) into type (OleStr).

Codigo:

Código Delphi [-]
begin
  //    combobox6.Clear;
      Dmodulo.Ano.SQL.Clear ;
      Dmodulo.Ano.SQL.Add('select * from ANOS where ANO=:A');
      Dmodulo.Ano.ParamByName('A').Value:=DBLookupComboBox1.Text;
      Dmodulo.Ano.Open;
      Edit6.Text:=Dmodulo.Ano.FieldByName('ANO').Value;


        Dmodulo.Reporte_Cobrado2.SQL.Clear ;
        Dmodulo.Reporte_Cobrado2.SQL.Add('SELECT * FROM REPORTE_COBRADO WHERE ANO=:A');
        Dmodulo.Reporte_Cobrado2.ParamByName('A').Value:=Edit6.Text;
        Dmodulo.Reporte_Cobrado2.Open;

        //Dmodulo.Reporte_Cobrado2.First;
             //while not Dmodulo.Reporte_Cobrado2.Eof do
                   Begin
                         DBComboBox1.Items.Add(DMODULO.Reporte_Cobrado2.FieldByName('Mes').AsString) ;
                          // Dmodulo.Reporte_Cobrado2.Next;
                   end;
end;

maxzama 30-01-2015 19:59:52

Gracias. Por la ayuda. Me a servido, tambien para otra pantalla.


La franja horaria es GMT +2. Ahora son las 02:05:18.

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