Hola
Cita:
Empezado por The Cid James
Ademas de esto quisiera que una vez seleccionado el pais me filtre el siguiete dbcombobox el estado o provincia de cada pais tomando como referencia el id del pais
|
Para lo que comentas resulta mas simple usar dos
TComboBox:
Código Delphi
[-]
procedure TForm1.FormCreate(Sender: TObject);
begin
with tuQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('SELECT ID, NOMBRE FROM PAIS');
SQL.Add('ORDER BY NOMBRE');
Open;
while not Eof do
begin
ComboBox1.Items.AddObject(FieldByname('NOMBRE').AsString,
Pointer(FieldByName('ID').AsInteger));
Next;
end;
First;
ComboBox1.ItemIndex:= 0;
end;
end;
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
with tuQuery2 do
begin
Close;
SQL.Text:= 'SELECT ID, NOMBRE FROM PROVINCIA WHERE REF_PAIS = :PID';
ParamByName('PID').AsInteger:= Integer(ComboBox1.Items.Objects[ComboBox1.ItemIndex] );
Open;
ComboBox2.Clear;
while not Eof do
begin
ComboBox2.Items.AddObject(FieldByname('NOMBRE').AsString,
Pointer(FieldByName('ID').AsInteger));
Next;
end;
First;
ComboBox2.ItemIndex:= 0;
end;
end;
Pero mas eficiente es usar dos
TDBLookupComboBox, ejemplo:
Código Delphi
[-]
procedure TForm1.FormCreate(Sender: TObject);
begin
with tuQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('SELECT ID, NOMBRE FROM PAIS');
SQL.Add('ORDER BY NOMBRE');
Open;
end;
with DBLookupComboBox1 do
begin
ListSource:= DataSource1; ListField := 'NOMBRE'; KeyField := 'ID' end;
end;
procedure TForm1.DBLookupComboBox1Exit(Sender: TObject);
begin
with tuQuery2 do
begin
Close;
SQL.Clear;
SQL.Add('SELECT ID, NOMBRE, REF_PAIS');
SQL.Add('FROM PROVINCIA WHERE REF_PAIS = :PID');
SQL.Add('ORDER BY NOMBRE');
ParamByName('PID').AsInteger:= DBLookupComboBox1.KeyValue;
Open;
end;
with DBLookupComboBox2 do
begin
ListSource:= DataSource2; ListField := 'NOMBRE'; KeyField := 'ID' end;
end;
Saludos