Hola Rofocale.
Cita:
Hola estoy retomando el ejemplo de hace tiempo.. debido a que estuve ocupado trabajando
ahora lo he probado y no filtra el combobox sigue apareciendome todo en el segundo combobox
espero puedas ayudarme
|
Y tenés razón, no hacía el filtrado.
Cambié los nombres de los campos de las tablas anteriores, quedaron así:
TABLA CATEGORIAS
CCATEGORIA CHAR(1)
CNOMBRE VARCHAR(20)
TABLA UNIDADES
UCATEGORIA CHAR(1)
UNOMBRE VARCHAR(20)
En mi prueba usé estos datos:
TABLA CATEGORIAS
CAT - NOMB.
-----------------------
A - BEBIDAS
B - LICORES
TABLA UNIDADES
CAT - NOMB.
--------------------
A - GASEOSAS
A - JUGOS
B - VINOS
A - LICUADOS
B - LICORES
B - CHAMPAGNES
A - AGUA MINERAL
B - CERVEZAS
El código Delphi:
Código Delphi
[-]
...
procedure TForm1.FiltrarComboBox;
begin
IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('SELECT UNOMBRE FROM UNIDADES, CATEGORIAS');
IBQuery1.SQL.Add('WHERE UCATEGORIA = CCATEGORIA AND UCATEGORIA =');
IBQuery1.SQL.Add('(SELECT CCATEGORIA FROM CATEGORIAS WHERE CNOMBRE =:NOMB)');
IBQuery1.ParamByName('NOMB').AsString:= cbCategorias.Text;
IBQuery1.Open;
cbUnidades.Clear;
while not IBQuery1.Eof do
begin
cbUnidades.Items.Add(IBQuery1.FieldByName('UNOMBRE').AsString);
IBQuery1.Next;
end;
cbUnidades.ItemIndex:= 0;
IBQuery1.Close
end;
procedure TForm1.FormShow(Sender: TObject);
begin
IBQuery1.Close;
IBQuery1.SQL.Text:= 'SELECT * FROM CATEGORIAS ORDER BY CNOMBRE';
IBQuery1.Open;
while not IBQuery1.Eof do
begin
cbCategorias.Items.Add(IBQuery1.FieldByName('CNOMBRE').AsString);
IBQuery1.Next;
end;
cbCategorias.ItemIndex:= 0;
IBQuery1.Close;
IBQuery1.SQL.Text:= 'SELECT * FROM UNIDADES ORDER BY UNOMBRE';
IBQuery1.Open;
while not IBQuery1.Eof do
begin
cbUnidades.Items.Add(IBQuery1.FieldByName('UNOMBRE').AsString);
IBQuery1.Next;
end;
cbUnidades.ItemIndex:= 0;
IBQuery1.Close;
FiltrarComboBox
end;
procedure TForm1.cbCategoriasChange(Sender: TObject);
begin
FiltrarComboBox;
end;
Al seleccionar la categoria en
cbCategorias filtra el combo
cbUnidades acorde a la categoría seleccionada.
Saludos.