Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Firebird: Tabellen abfragen (https://www.delphipraxis.net/155418-firebird-tabellen-abfragen.html)

pustekuchen 22. Okt 2010 10:09

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:
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;
Beim Debuggen hab ich festgestellt das dataset.DataSource = nil ist. Doch wo ist denn sonst das Ergebnis?
Danke schonmal für die Hilfe ;)

DeddyH 22. Okt 2010 10:15

AW: Firebird: Tabellen abfragen
 
Wozu brauchst Du eine Datasource?
Delphi-Quellcode:
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;
Ungetestet, sollte aber funktionieren, solange ich keinen groben Denkfehler gemacht habe.

pustekuchen 22. Okt 2010 10:20

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 ;)

shmia 22. Okt 2010 10:53

AW: Firebird: Tabellen abfragen
 
Du solltest noch den Übergabeparameter ändern:
Delphi-Quellcode:
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;
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.
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.

pustekuchen 22. Okt 2010 11:15

AW: Firebird: Tabellen abfragen
 
Danke shmia, genau so eine Art von Tipps kann ich gebrauchen ;)
Habs übernommen.

pustekuchen 22. Okt 2010 11:25

AW: Firebird: Tabellen abfragen
 
Sorry 4 Push

Nur leider haben meine Tabellen in der Checkbox nun + ~20 Leerzeichen hinten dran?
Wodran kann das liegen?

DeddyH 22. Okt 2010 11:26

AW: Firebird: Tabellen abfragen
 
Das weiß ich auch nicht, aber Du kannst die beim Einfügen ja einfach wegtrimmen.

pustekuchen 22. Okt 2010 11:32

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 ;)

Neutral General 22. Okt 2010 11:34

AW: Firebird: Tabellen abfragen
 
Ja, das ist mir eben auch aufgefallen. Das scheint irgendwie so zu sein. Hab auch Trim benutzt.

DeddyH 22. Okt 2010 11:35

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 09:32 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz