Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ACCESS wie kann man Abfragen und Tabellen unterscheiden (https://www.delphipraxis.net/144551-access-wie-kann-man-abfragen-und-tabellen-unterscheiden.html)

p80286 10. Dez 2009 15:08

Datenbank: ACCESS • Version: 2000 • Zugriff über: ADO

ACCESS wie kann man Abfragen und Tabellen unterscheiden
 
Hallo Zusammen,

Unter ADO kommt man ja mit GetTableNames an alle Tabellen in einer ACCESS-DB heran. Das Dumme ist nur, das gleichzeitig alle vorhandenen Abfragen auch als Tabellen ausgegeben werden.
Über die Systemtabellen hab ich schon versucht die entsprechende Info zu bekommen, aber da gibt's nur unverständliches Kauderwelsch oder Lesefehler.

Habt Ihr einen Tip für mich, wie ich Tabellen und Abfragen unterscheiden kann?

Gruß
K-H

Tyrael Y. 10. Dez 2009 15:18

Re: ACCESS wie kann man Abfragen und Tabellen unterscheiden
 
Kann es sein, daß deine Abfragen zufällig genauso heißen wie Tabellen?
Hab es gerade bei mir getestet und ich krieg nur die Tabellen.

Ich habe in einer Access DB eine Tabelle und zwei Abfragen angelegt.
Bekomme mit GetTablenNames nur die eine Tabelle.

Delphi-Quellcode:
var
  Conn: TADOConnection;
  TableNames: TStringList;
begin
...
   Conn.GetTableNames(TableNames);
...
Edit:
Du hast Recht, die Abfragen tauchen doch in der Liste auf, meine Abfragen waren ungültig und wurden deshalb nicht ausgewertet.

hoika 12. Dez 2009 07:23

Re: ACCESS wie kann man Abfragen und Tabellen unterscheiden
 
Hallo,

viell. jhilft dir die letzte Antwort aus folgendem Thread.

1

Wo wir gerade bei OpenSchema sind

2

Dort nach "Verwenden Sie den folgenden Code, um nur die Tabellen in der Access-Datenbank "Nwind"" suchen


Heiko

alzaimar 12. Dez 2009 08:02

Re: ACCESS wie kann man Abfragen und Tabellen unterscheiden
 
Vielleicht klappt das: Jede "Tabelle" öffnen und schauen, ob sie Read-Only ist.

p80286 14. Dez 2009 14:07

Re: ACCESS wie kann man Abfragen und Tabellen unterscheiden
 
Danke für den Hiweis,

ich hab jetzt folgendes genommen (aus der RTL kopiert)
Delphi-Quellcode:
{ - gettables:  -------}
  TypeField,
  NameField: TField;
  TableType: WideString;
  DataSet: TADODataSet;
  list : twidestrings;
begin
  ..
  list:=twidestrings.create;
  adoconnection1.Connected:=true;
  DataSet := TADODataSet.Create(nil);
  try
    adoconnection1.OpenSchema(siTables, EmptyParam, EmptyParam, DataSet);
    TypeField := DataSet.FieldByName('TABLE_TYPE'); { do not localize }
    NameField := DataSet.FieldByName('TABLE_NAME'); { do not localize }
    try
      List.Clear;
      while not DataSet.EOF do
      begin
        TableType := TypeField.AsWideString;
        if (TableType = 'TABLE') then    { Hier habe ich VIEW gelöscht! }
          List.Add(NameField.AsWideString);
        DataSet.Next;
      end;
    finally
    end;
  finally
    DataSet.Free;
  end;
  for i:=0 to list.count-1 do
    memo1.Lines.add(list[i]); { die Ausgabe }
Den Vorschlag mi Readonly hab ich nicht ausprobiert, vielleicht mal wenn ich vieeel Zeit habe.
Vielen Dank nochmal an alle!

K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:59 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