![]() |
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 |
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:
Edit:
var
Conn: TADOConnection; TableNames: TStringList; begin ... Conn.GetTableNames(TableNames); ... Du hast Recht, die Abfragen tauchen doch in der Liste auf, meine Abfragen waren ungültig und wurden deshalb nicht ausgewertet. |
Re: ACCESS wie kann man Abfragen und Tabellen unterscheiden
|
Re: ACCESS wie kann man Abfragen und Tabellen unterscheiden
Vielleicht klappt das: Jede "Tabelle" öffnen und schauen, ob sie Read-Only ist.
|
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:
Den Vorschlag mi Readonly hab ich nicht ausprobiert, vielleicht mal wenn ich vieeel Zeit habe.
{ - 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 } 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