Hola.
Supongo que podrías encapsular la carga de los combos dentro de un procedimiento:
Código Delphi
[-]
procedure TfrmArticulos.FiltrarComboBox;
begin
IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('SELECT C1.NOMBRE FROM UNIDADES C1, CATEGORIAS C2');
IBQuery1.SQL.Add('WHERE NOMBRE2 = CCATEGORIAS AND NOMBRE2 =');
IBQuery1.SQL.Add('(SELECT CCATEGORIAS FROM CATEGORIAS C2 WHERE C2.NOMBRE =:NOMB)');
IBQuery1.ParamByName('NOMB').AsString:= cbCategorias.Text;
IBQuery1.Open;
cbUnidades.Clear;
while not IBQuery1.Eof do
begin
cbUnidades.Items.Add(IBQuery1.FieldByName('NOMBRE').AsString);
IBQuery1.Next;
end;
cbUnidades.ItemIndex:= 0;
IBQuery1.Close
end;
procedure TfrmArticulos.CargarComboBox;
begin
IBQuery1.Close;
IBQuery1.SQL.Text:= 'SELECT * FROM CATEGORIAS ORDER BY NOMBRE';
IBQuery1.Open;
while not IBQuery1.Eof do
begin
cbCategorias.Items.Add(IBQuery1.FieldByName('NOMBRE').AsString);
IBQuery1.Next;
end;
cbCategorias.ItemIndex:= 0;
IBQuery1.Close;
IBQuery1.SQL.Text:= 'SELECT * FROM UNIDADES ORDER BY NOMBRE';
IBQuery1.Open;
while not IBQuery1.Eof do
begin
cbUnidades.Items.Add(IBQuery1.FieldByName('NOMBRE').AsString);
IBQuery1.Next;
end;
cbUnidades.ItemIndex:= 0;
IBQuery1.Close;
FiltrarComboBox;
end;
procedure TfrmArticulos.FormShow(Sender: TObject);
begin
CargarComboBox;
FiltrarComboBox;
end;
Luego al principio del procedimiento RecuperaDatosBusq, podrías hacer:
Código Delphi
[-]
procedure TfrmArticulos.RecuperaDatosBusq;
var
sCateg, sUnis: String;
begin
CagarComboBox;
iClave := dmDatos.cdsArticulos.FieldByName('Clave').AsInteger;
...
Creo que debería funcionar. Pero vas a tener que probarlo vos, yo no tengo modo de comprobarlo.
Saludos.