Nochmal servus,
ich bin gerade an einem programm bzw bei einem fragment dieses programmes.
Die grobe funktion sieht folgendermaßen aus:
1 editfeld: edit1
1 combobox1 zum bestimmen der
DB
1 combobox2 zum bestimmen der abzufragenden felder in der bei combobox1 gewählten
db
1 button um die
query abfrage zu starten
1
DB grid um die
query auszugeben.
also im moment ist das so das ich für jede
DB ein eigenes
Query und iene eigene DS habe
wenn ich in combobox 1 etwas auswähle dann werden in combobox 2 auch nur die optionen angezeigt die auch in der jeweiligen
DB vorhanden sind, das funktioniert auch prima aber die umsetzung ist meiner meinung nach sehr umständlich:
ich habe ein onchange ereignis auf combobox1 das die items von combobox 2 über eine procedure anpasst:
onchange:
Delphi-Quellcode:
procedure TTblLieferanten.ComboBox1Change(Sender: TObject);
begin
suchort := strtoint(combobox1.Text);
setsearchlabels(suchort);
end;
procedure
Delphi-Quellcode:
procedure TTblLieferanten.setSearchLabels(m: Byte);
begin
case m of
1: begin
combobox2.Clear;
Label10.visible := True;Label10.Caption := '1 = Name';
Label11.visible := True;Label11.Caption := '2 = Kunden Nr.';
Label13.visible := True;Label13.Caption := '';
Label14.visible := True;Label14.Caption := '';
combobox2.Items.Add('1');
combobox2.Items.Add('2');
combobox2.ItemIndex := 0;
end;
2: begin
combobox2.Clear;
Label10.visible := True;Label10.Caption := '1 = Name';
Label11.visible := True;Label11.Caption := '3 = Artikel Nr.';
Label13.visible := True;Label13.Caption := '6 = Bezeichnung';
Label14.visible := True;Label14.Caption := '7 = Lieferanten';
combobox2.Items.Add('1');
combobox2.Items.Add('3');
combobox2.Items.Add('6');
combobox2.Items.Add('7');
combobox2.ItemIndex := 0;
end;
3: begin
combobox2.Clear;
Label10.visible := True;Label10.Caption := '2 = Kunden Nr.';
Label11.visible := True; Label11.Caption := '5 = Rechnungs Nr.';
Label13.visible := True; Label13.Caption := '';
Label14.Caption := '';
combobox2.Items.Add('2');
combobox2.Items.Add('5');
combobox2.ItemIndex := 0;
end;
4: begin
combobox2.Clear;
Label10.visible := True;Label10.Caption := '2 = Kunden Nr.';
Label11.visible := True;Label11.Caption := '4 = Auftrags Nr.';
Label13.visible := True;Label13.Caption := '';
Label14.Caption := '';
combobox2.Items.Add('2');
combobox2.Items.Add('4');
combobox2.ItemIndex := 0;
end;
5: begin
combobox2.Clear;
Label10.visible := True;Label10.Caption := '1 = Name';
Label11.Caption := '';
Label13.Caption := '';
Label14.Caption := '';
combobox2.Items.Add('1');
combobox2.ItemIndex := 0;
end;
end;
Bei einem klick auf button1 wird dann der
SQL string der jeweiligen in combobox1 ausgewählten
query angepasst:
Delphi-Quellcode:
procedure TTblLieferanten.Button1Click(Sender: TObject);
var
m,n:byte;
begin
m := suchort;
n := strtoint(combobox2.Text);
case m of
1: begin
case n of
1:begin
qrykunden.sql.Clear;
qrykunden.sql.text := 'SELECT * FROM kunden WHERE Name LIKE "%'+edit1.text+'%"';
end;
2: begin
qryartikel.SQL.Clear;
qryartikel.sql.text := 'SELECT * FROM kunden WHERE KdNr LIKE "%'+edit1.text+'%"';
end;
end;
qrykunden.active := True;
DBGrid.Datasource := DSKunden;
qryartikel.Active := false;
qryrechnungen.Active := false;
qryauftraege.Active := false;
qrylieferanten.active := false;
end;
2: begin
case n of
1: begin
qryartikel.sql.Clear;
qryartikel.sql.text := 'SELECT * FROM artikel WHERE Name LIKE "%'+edit1.text+'%"';
end;
3: begin
qryartikel.sql.Clear;
qryartikel.sql.text := 'SELECT * FROM artikel WHERE ArtikelNr LIKE "%'+edit1.text+'%"';
end;
6: begin
qryartikel.sql.Clear;
qryartikel.sql.text := 'SELECT * FROM artikel WHERE Bezeichnung LIKE "%'+edit1.text+'%"';
end;
7: begin
qryartikel.sql.Clear;
qryartikel.sql.text := 'SELECT * FROM artikel WHERE Lieferant LIKE "%'+edit1.text+'%"';
end;
end;
qrykunden.active := false;
qryartikel.Active := true;
DBGrid.Datasource := DSartikel;
qryrechnungen.active := false;
qryauftraege.active := false;
qrylieferanten.active := false;
end;
3: begin
case n of
2: begin
qryrechnungen.sql.Clear;
qryrechnungen.sql.text := 'SELECT * FROM Rechnungen WHERE KdNr LIKE "%'+edit1.text+'%"';
end;
5: begin
qryrechnungen.sql.Clear;
qryrechnungen.sql.text := 'SELECT * FROM Rechnungen WHERE RechnungsNr LIKE "%'+edit1.text+'%"';
end;
end;
qrykunden.active := false;
qryartikel.active := false;
qryrechnungen.active := true;
DBGrid.Datasource := DSrechnungen;
qryauftraege.active := false;
qrylieferanten.active := false;
end;
4: begin
case n of
2: begin
qryauftraege.sql.Clear;
qryauftraege.sql.text := 'SELECT * FROM auftraege WHERE KdNr LIKE "%'+edit1.text+'%"';
end;
4: begin
qryauftraege.sql.Clear;
qryauftraege.sql.text := 'SELECT * FROM auftraege WHERE auftragsnr LIKE "%'+edit1.text+'%"';
end;
end;
qrykunden.active := false;
qryartikel.active := false;
qryrechnungen.active := false;
qryauftraege.active := true;
DBGrid.Datasource := DSauftraege;
qrylieferanten.active := false;
end;
5: begin
case n of
1: begin
qrylieferanten.sql.Clear;
qrylieferanten.sql.text := 'SELECT * FROM lieferanten WHERE Name LIKE "%'+edit1.text+'%"';
end;
end;
qrykunden.active := false;
qryartikel.active := false;
qryrechnungen.active := false;
qryauftraege.active := false;
qrylieferanten.active := true;
DBGrid.Datasource := DSKunden;
end;
end;
end;
der rest vom code ist nur für die farbliche absetzung der DBgrid eintraege verantwortlich.
und nun meine frage ob ich mit diesem code nicht um 10.000 ecken denke und mir das lesen elbst schwer mache.
Mfg Xan553