Hola ciudad54.
Usando dos
TComboBox podrías hacer:
Código Delphi
[-]
procedure TForm1.FormCreate(Sender: TObject);
begin
qyEspec.Close;
qyEspec.SQL.Text := 'SELECT ID, ESPEC FROM ESPECIALIDAD';
qyEspec.Open;
while not qyEspec.Eof do
begin
ComboBox1.AddItem(qyEspec.FieldByName('ESPEC').AsString,
TObject(qyEspec.FieldByName('ID').AsInteger));
qyEspec.Next;
end;
end;
procedure TForm1.ComboBox1Change(Sender: TObject);
var
cb: TComboBox;
begin
cb := TComboBox(Sender);
if cb.ItemIndex <> -1 then
begin
qyMedic.Close;
qyMedic.SQL.Text := 'SELECT NOMBRE FROM MEDICO WHERE ESPEC_ID = :ID';
qyMedic.ParamByName('ID').AsInteger := Integer(cb.Items.Objects[cb.ItemIndex]);
qyMedic.Open;
ComboBox2.Clear;
while not qyMedic.Eof do
begin
ComboBox2.Items.Add(qyMedic.FieldByName('NOMBRE').AsString);
qyMedic.Next;
end;
end;
end;
Pero resulta mucho mas simple usar dos
TDBLoocupComboBox:
Código Delphi
[-]
procedure TForm1.FormCreate(Sender: TObject);
begin
qyEspec.Close;
qyEspec.SQL.Text := 'SELECT ID, ESPEC FROM ESPECIALIDAD';
qyEspec.Open;
qyMedic.DataSource := dsEspec;
DBLookupComboBox1.KeyField := 'ID';
DBLookupComboBox1.ListField := 'ESPEC';
DBLookupComboBox1.ListSource := dsEspec;
DBLookupComboBox2.KeyField := 'ID';
DBLookupComboBox2.ListField := 'NOMBRE';
DBLookupComboBox2.ListSource := dsMedic; end;
procedure TForm1.DBLookupComboBox1CloseUp(Sender: TObject);
begin
qyMedic.Close;
qyMedic.SQL.Text := 'SELECT ID, NOMBRE FROM MEDICO WHERE ESPEC_ID = :ID';
qyMedic.Open;
end;
Saludos