Hola.
Mirá, vamos a simplificar la cosa, renombrá los campos de tus tablas (o crealas nuevamente) para que queden así:
CATEGORIAS
CLAVE_CA
NOMBRE_CA
FECHA_CA
CATEGORIA_CA
UNIDADES
CLAVE_UN
NOMBRE_UN
FECHA_UN
CATEGORIA_UN
Con esos nombres el código Delphi es:
Código Delphi
[-]
procedure TForm1.FiltrarComboBox;
begin
IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('SELECT NOMBRE_UN FROM UNIDADES, CATEGORIAS ');
IBQuery1.SQL.Add('WHERE CATEGORIA_UN = CATEGORIA_CA AND CATEGORIA_UN = ');
IBQuery1.SQL.Add('(SELECT CATEGORIA_CA FROM CATEGORIAS WHERE NOMBRE_CA = :NOMB)');
IBQuery1.ParamByName('NOMB').AsString:= cbCategorias.Text;
IBQuery1.Open;
cbUnidades.Clear;
while not IBQuery1.Eof do
begin
cbUnidades.Items.Add(IBQuery1.FieldByName('NOMBRE_UN').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 NOMBRE_CA';
IBQuery1.Open;
while not IBQuery1.Eof do
begin
cbCategorias.Items.Add(IBQuery1.FieldByName('NOMBRE_CA').AsString);
IBQuery1.Next;
end;
cbCategorias.ItemIndex:= 0;
IBQuery1.Close;
IBQuery1.SQL.Text:= 'SELECT * FROM UNIDADES ORDER BY NOMBRE_UN';
IBQuery1.Open;
while not IBQuery1.Eof do
begin
cbUnidades.Items.Add(IBQuery1.FieldByName('NOMBRE_UN').AsString);
IBQuery1.Next;
end;
cbUnidades.ItemIndex:= 0;
IBQuery1.Close;
FiltrarComboBox
end;
procedure TForm1.cbCategoriasChange(Sender: TObject);
begin
FiltrarComboBox
end;
Está probado y al igual que el código anterior funciona correctamente. Siempre que los datos sean coherentes, es decir, si las bebidas sin alcohol son categoría
A y las que tienen alcohol
B, no guardes 'GASEOSAS' poniendo en el campo CATEGORIA_UN una
'B'.
Fijate que remarque en negrita los campos de la consulta en el código Delphi, debes ponerlos
textualmente así. Ya que así están definidos en la declaración de la tabla. (
No califiques los campos con C1 y C2, tampoco es necesario el uso de
AS)
Resumiendo, si copias textualmente este ejemplo desde la creación de las tablas, te tiene que funcionar.
Saludos.