alle Tabellen einer Datenbank in ComboBox

Zerolith

Mitglied
Sorry - hab rumgesucht und gesucht - aber leider nicht gefunden

kann mir jemand sagen wie ich das realisieren kann?

(bitte mit ADO! -es handelt sich um ne MS SQL Datenbank)

thx (is dringend!)
 

Dario Linsky

Erfahrenes Mitglied
Da kommst Du normalerweise mit einem einfachen Query ran. Wie das allerdings aussieht, hängt vom jeweiligen Datenbanksystem ab. In MySQL ist das z.B. einfach nur "SHOW TABLES".
Bei MSSQL sieht das leider schon etwas komplizierter aus, weil Du dazu erst noch einen Umweg über die Systemobjekte des Servers machen musst. Wenn Du schon eine Verbindung zur Datenbank hast, sollte das mit folgender Abfrage gehen:
Code:
SELECT TABLE_CATALOG AS Datenbank, TABLE_NAME AS Tabelle FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE';

Das Feld "TABLE_CATALOG" kannst Du auch weglassen, wenn Du nicht unbedingt noch den Namen der Datenbank brauchst.

Ansonsten gibt es in der ADODB-Library auch noch entsprechende Objekte, mit denen sowas schon verfügbar ist. Aber unter Delphi hab ich die noch nie benutzt.
 

Zerolith

Mitglied
haja?

also - ich komm mit was du meinst (wobei ich den mehr als perversen SQL STring nich ganz Check)

wie krieg ich das ergebnis in die ComboBox?...

fieldbyname()???

oder wie?
 

Dario Linsky

Erfahrenes Mitglied
Angenommen, Du hast ein Query-Objekt namens "myQuery", dann sollte das so aussehen:
Code:
with myQuery do
begin
  Sql.Clear;
  Sql.Add('SELECT TABLE_CATALOG AS Datenbank, TABLE_NAME AS Tabelle FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = ''BASE TABLE'';');
  Open;
  if RecordCount > 0 then First;
  while not Eof do
  begin
    ComboBox1.Items.Add(String(FieldValues['Tabelle']);
    Next;
    Application.ProcessMessages; // damit das Programm nicht einfriert
  end;
end; // end with
Hab ich nicht getestet, also ohne Gewähr. ;)
Das mit dem SQL-String ist eigentlich nur eine normale Abfrage. Bei MySQL kannst Du auch ohne weiteres auf die Auflistung aller Tabellen in der Datenbank zugreifen, indem Du "SHOW TABLES" abfragst.
Bei MSSQL fällt das ganze etwas schwieriger aus, weil man da wie gesagt über ein Schema der Datenbank gehen muss.

Beim Eintragen in die Combobox musst Du darauf achten, dass Du die Tabellennamen aus der Abfrage mit String() umwandelst.
 

Arne Buchwald

Erfahrenes Mitglied
Hallo,

steht unter TSession:

procedure GetTableNames(const DatabaseName, Pattern: string; Extension, SystemTables: Boolean; List: TStrings);