![]() |
Datenbank: MSSQL • Version: 2000 • Zugriff über: ADO
Tabellen einer DB auflisten über ADO
Ich sitz grad etwas auf dem Schlauch. Über folgende Methode liste ich mir alle Tabellenfelder in eine StringList. Das klappt auch.
Delphi-Quellcode:
Ich bin mit diesen ganzen ADO Sachen nicht so vertraut. Ich suche jetzt was Ähnliches. Will aber nicht die Felder einer Tabelle auflisten sondern alle Tabellen einer Datenbank. Am liebsten natürlich unabhängig vom DB System.
procedure TMailFieldName.FillFieldNames (Names : TStringList) ;
var aRS : _RecordSet; aOleV : OleVariant; sSQL : string ; FConnection : string ; Info : TMailDatabaseInfo ; i : integer ; begin aRS := CoRecordSet.Create; aRS.CursorLocation := adUseServer; Info := TMailDatabaseInfo (GetComponent(0)) ; with Info do begin sSQL := format('select * from %s where 1=2', [Tablename] ) ; FConnection := ConnectionString ; end ; try aRS.Open(sSQL, FConnection,adOpenStatic, adLockReadOnly, adCmdText); Names.clear ; for i := 0 to aRS.Fields.Count-1 do Names.Add (aRS.Fields[i].Name) ; finally aRS.Close; end; end; |
Re: Tabellen einer DB auflisten über ADO
Hai Jelly,
meinst Du das so wie es die Methode [oh].GetTableNames();[/oh] der ADOConnection macht?;
Delphi-Quellcode:
procedure TForm1.ADOConnection1AfterConnect(Sender: TObject);
begin ADOConnection1.GetTableNames(lb_Tabellen.Items); end; |
Re: Tabellen einer DB auflisten über ADO
Genau. Nur dass ich eben nicht mit TADODataset arbeite.
|
Re: Tabellen einer DB auflisten über ADO
Zitat:
SQL-Code:
SELECT * FROM datenbank.INFORMATION_SCHEMA.TABLES
|
Re: Tabellen einer DB auflisten über ADO
Hab mich an die TADOConnection.GetTablesNames angelehnt, und bin zu folgendem funktionierendem Code gelangt.
Delphi-Quellcode:
Klappt zumindest für den MSSQL Server einwandfrei... Sollte aber prinzipiell auch für andere DB klappen.
procedure TMailTableName.FillTableNames(Names: TStringList);
var aRS : _RecordSet; aConn : _Connection ; aOleV : OleVariant; sSQL : string ; FConnection : string ; Info : TMailDatabaseInfo ; i : integer ; TypeID, NameID : integer ; TableType : string ; begin Info := TMailDatabaseInfo (GetComponent(0)) ; aRS := CoRecordSet.Create; aConn := CoConnection.Create as _Connection ; try aConn.ConnectionString := Info.ConnectionString ; aConn.Open(Info.ConnectionString, '', '', adConnectUnspecified); aRS := aConn.OpenSchema(adSchemaTables,EmptyParam,EmptyParam) ; TypeID := -1 ; NameID := -1 ; Names.clear ; for i := 0 to aRS.Fields.Count-1 do begin if uppercase(aRS.Fields[i].Name) = 'TABLE_TYPE' then TypeID := i ; if uppercase(aRS.Fields[i].Name) = 'TABLE_NAME' then NameID := i ; end ; while not aRS.EOF do begin TableType := uppercase (aRS.Collect[TypeID]) ; if ((TableType = 'TABLE') or (TableType = 'VIEW')) and (TableType <> 'SYSTEM TABLE') and (TableType <> 'SYSTEM VIEW') then Names.Add(aRS.Collect[NameID]) ; aRS.MoveNext ; end ; aRS.Close; aConn.close ; except end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:52 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 by Thomas Breitkreuz