![]() |
Datenbank: Firebird • Version: 2.1 • Zugriff über: Delphi
Firebird: Tabellen abfragen
Guten Tag,
Seit gestern Arbeite ich mich in Firebird + Delphi ein. Ich möchte jetzt alle Tabellen in einer Datenbank zu einer ComboBox hinzufügen. Die Select Abfrage,müsste richtig sein, da sie per ISQL einwandfrei funktioniert. Doch ich weiß nicht genau wo das Ergebnis der Select Abfrage drin steht. Ich habe folgendes Probiert.
Delphi-Quellcode:
Beim Debuggen hab ich festgestellt das dataset.DataSource = nil ist. Doch wo ist denn sonst das Ergebnis?
procedure TForm1.fillCBTables(cb: TComboBox);
var Tables: TStringList; i, count: integer; begin if Assigned(db) and db.Connected then begin trans.Active := true; dataset.Active := false; dataset.SelectSQL.Clear; dataset.SelectSQL.Text := 'SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE ' +'(RDB$RELATION_NAME NOT STARTING ''RDB$'')' +' AND (RDB$RELATION_NAME NOT STARTING ''TMP$'') ' +'AND (RDB$RELATION_NAME NOT STARTING ''MON$'') ' +'ORDER BY RDB$RELATION_NAME;'; dataset.Open; cb.Clear; for i := 0 to dataset.DataSource.DataSet.FieldCount -1 do cb.AddItem(dataset.DataSource.DataSet.Fields.Fields[i].AsString,nil); trans.Commit; end; end; Danke schonmal für die Hilfe ;) |
AW: Firebird: Tabellen abfragen
Wozu brauchst Du eine Datasource?
Delphi-Quellcode:
Ungetestet, sollte aber funktionieren, solange ich keinen groben Denkfehler gemacht habe.
procedure TForm1.fillCBTables(cb: TComboBox);
var Tables: TStringList; i, count: integer; begin if Assigned(db) and db.Connected then begin cb.Items.Clear; trans.Active := true; dataset.Active := false; dataset.SelectSQL.Text := 'SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE ' +'(RDB$RELATION_NAME NOT STARTING ''RDB$'')' +' AND (RDB$RELATION_NAME NOT STARTING ''TMP$'') ' +'AND (RDB$RELATION_NAME NOT STARTING ''MON$'') ' +'ORDER BY RDB$RELATION_NAME'; dataset.Open; while not dataset.EOF do begin cb.Items.Add(dataset.Fields[0].AsString); dataset.Next; end; trans.Commit; end; end; |
AW: Firebird: Tabellen abfragen
Danke, Funktioniert Wunderbar :)
Wie gesagt, habe erst gestern mit Firebird angefangen und weiß noch nicht genau Was man Wo, Wie macht ;) |
AW: Firebird: Tabellen abfragen
Du solltest noch den Übergabeparameter ändern:
Delphi-Quellcode:
Dadurch, dass du TStrings verwendest, bist du völlig frei, ob du die Tabellennamen in einer Combobox, ListBox, Memo oder was auch immer sehen möchtest.
procedure TForm1.fillCBTables(items:TStrings{cb: TComboBox});
begin Assert(Assigned(items)); ..... dataset.Open; while not dataset.EOF do begin items.Add(dataset.Fields[0].AsString); dataset.Next; end; .... end; Der Aufruf muss natürlich leicht angepasst werden:
Delphi-Quellcode:
fillCBTables(ComboboxTabellen.Items);
Und die Transaction kannst du Dir auch schenken; schliesslich liest du ja nur. |
AW: Firebird: Tabellen abfragen
Danke shmia, genau so eine Art von Tipps kann ich gebrauchen ;)
Habs übernommen. |
AW: Firebird: Tabellen abfragen
Sorry 4 Push
Nur leider haben meine Tabellen in der Checkbox nun + ~20 Leerzeichen hinten dran? Wodran kann das liegen? |
AW: Firebird: Tabellen abfragen
Das weiß ich auch nicht, aber Du kannst die beim Einfügen ja einfach wegtrimmen.
|
AW: Firebird: Tabellen abfragen
Ja ist schon komisch.
Habs jetzt erstmal mit Trim() gemacht. Falls jmd weiß wodran es liegen könnte, weißte bescheid ;) |
AW: Firebird: Tabellen abfragen
Ja, das ist mir eben auch aufgefallen. Das scheint irgendwie so zu sein. Hab auch Trim benutzt.
|
AW: Firebird: Tabellen abfragen
Möglicherweise ist das ein Feld fixer Länge, dann wird IIRC mit Leerzeichen aufgefüllt. Aber ich kann gerade nicht nachschauen, da ich in der Firma kein FB verfügbar habe.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz