AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Tabellenpräfix auslesen
Thema durchsuchen
Ansicht
Themen-Optionen

Tabellenpräfix auslesen

Ein Thema von Moony · begonnen am 17. Sep 2008 · letzter Beitrag vom 18. Sep 2008
Antwort Antwort
Moony

Registriert seit: 29. Jul 2003
Ort: Essen
454 Beiträge
 
Delphi 2010 Professional
 
#1

Tabellenpräfix auslesen

  Alt 17. Sep 2008, 15:43
Datenbank: MSAccess, MSSQL, MySQL, DB2, Oracle • Zugriff über: TADOConnection
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:
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_NAMEthen
        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;
Hoffe mir kann da jemand auf die schnelle helfen....

Gruß, Moony
Ich weiß, daß ich nichts weiß! Sokrates
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Tabellenpräfix auslesen

  Alt 17. Sep 2008, 19:59
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;
  Mit Zitat antworten Zitat
Moony

Registriert seit: 29. Jul 2003
Ort: Essen
454 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Tabellenpräfix auslesen

  Alt 18. Sep 2008, 13:36
ok, danke. ich werd ausprobieren und mich zurückmelden.

Gruß, Moony
Ich weiß, daß ich nichts weiß! Sokrates
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:50 Uhr.
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