
Obtener elementos únicos en Combobox
#1
Posted 30 January 2015 - 08:38 AM
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...
#2
Posted 30 January 2015 - 09:41 AM
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.
SELECT DISTINCT mes FROM REPORTE_COBRADO WHERE ANO=:A
Las otras las puedes encontrar googleando un poco.
Saludos
#3
Posted 30 January 2015 - 11:25 AM
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).
#4
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
#5
Posted 30 January 2015 - 12:52 PM