![]() |
Datenbank: MSAccess, MSSQL, MySQL, DB2, Oracle • Zugriff über: TADOConnection
Tabellenpräfix auslesen
Hallo zusammen,
hab da mal wieder ein Problemchen: Bei der Anbidung meiner Software an eine Datenbank über die ODBC Schnittstelle lese ich nach der Verbindung zur DB alle Tabellen mit TABLE_TYPE = TABLE, VIEW oder SYNONYM. Mein Problem bezieht sich speziell auf die DB2 Datenbank, aber die Lösung sollte grundsätzlich dann für alle gelten. Beim Auslesen der Tabellennamen wird kein Tabellenpräfix ausgegeben. Wenn ich dann den SQL befehl abschickcen will, wird automatisch der Benutzer als Präfix gesetzt und somit kommt die SQL Anweisung mit einem Fehler zurück. Meine Frage also, wie kann ich die Tabellen inklusive Präfix auslesen? Zur Zeit hole ich mir die Tabellen folgendermaßen:
Delphi-Quellcode:
Hoffe mir kann da jemand auf die schnelle helfen.... :wall:
function GetDbTableNames(ConnectionStr: string; List: TStrings): Boolean;
// Schema jeder Datenbank in ODBC // TABLE_CATALOG // TABLE_SCHEMA // INDEX_NAME // TYPE // TABLE_NAME var myDB : Variant; myRS : Variant; SchemaOrd : TOleEnum; Restrictions : OleVariant; SchemaID : OleVariant; i : integer; IDx : integer; begin try // Datenbank öffnen myDB := CreateOleObject('ADODB.Connection'); myRS := CreateOleObject('ADODB.Recordset'); myDB.CursorLocation := 3; myDB.ConnectionString := ConnectionStr; myDB.Open; try // Recordset zuweisen SchemaOrd := 20; // nur Tabellen Restrictions := EmptyParam; SchemaID := EmptyParam; myRS := myDB.OpenSchema(SchemaOrd, Restrictions, SchemaID); // IDx setzen (Feldnummer für Tabellennamen) IDx := -1; for i := 0 to myRS.RecordCount - 1 do begin if myRS.Fields[i].Name = 'TABLE_NAME' then begin IDx := i; Break; end; end; // nur die Tabellen rausfiltern myRS.Filter := '(TABLE_TYPE = ''TABLE'') or (TABLE_TYPE = ''VIEW'') or (TABLE_TYPE = ''SYNONYM'')'; // Tabellen auslesen myRS.MoveFirst; if IDx = -1 then begin Result := False; Exit; end; while not myRS.EOF do begin List.Add(myRS.Fields[i].Value); myRS.MoveNext; end; Result := True; finally // Datenbank wieder freigeben if not (VarIsEmpty(myDB)) then begin myDB.Close; myDB := Unassigned; end; if not (VarIsEmpty(myRS)) then myRS := Unassigned; end; except on E:Exception do begin ErrMsg := E.Message; Result := False; end; end; end; Gruß, Moony |
Re: Tabellenpräfix auslesen
Delphi-Quellcode:
procedure GetTableNames(ADOConnection:TADOConnection; List: TStrings;
SystemTables: Boolean = false); var DataSet:TADODataSet; TypeField, NameField, SchemaField: TField; TableType: string; begin DataSet:=TADODataSet.Create(nil); try ADOConnection.OpenSchema(siTables, EmptyParam, EmptyParam, DataSet); TypeField := DataSet.FieldByName('TABLE_TYPE'); NameField := DataSet.FieldByName('TABLE_NAME'); SchemaField := DataSet.FieldByName('TABLE_SCHEMA'); List.BeginUpdate; try List.Clear; while not DataSet.Eof do begin TableType := TypeField.AsString; if (TableType = 'TABLE') or (TableType = 'VIEW') or (SystemTables and (TableType = 'SYSTEM TABLE')) then begin List.Append(SchemaField.AsString + '.' + NameField.AsString); end; DataSet.Next; end; finally List.EndUpdate; end; finally DataSet.free; end; end; |
Re: Tabellenpräfix auslesen
ok, danke. ich werd ausprobieren und mich zurückmelden.
Gruß, Moony |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:39 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