Hallo Legolas,
ich habe zumindest eine Lösung für Dein Problem bzgl. der (
Access-)Systemtabellen gefunden. Anstatt die Tabellenname über das Catalog-Object einzulesen, ist es besser, diese über OpenSchema einzulesen:
Delphi-Quellcode:
// füllt eine ListView mit 2 Spalten
procedure UpDateLV;
var aSchema:_RecordSet;
aCon :_Connection;
begin
ListView1.Clear;
aCon:=CoConnection.Create;
aCon.Open(....);
aSchema:=CoRecordSet.Create;
aSchema:=aCon.OpenSchema(adSchemaTables, EmptyParam, EmptyParam);
while not aSchema.EOF do
begin
with ListView1.Items.Add do
begin
Caption:=VarToStr(aSchema.Fields.Item['TABLE_NAME'].Value);
SubItems.Add(VarToStr(aSchema.Fields.Item['TABLE_TYPE'].Value));
end; // with
aSchema.MoveNext;
end; // while
end; // UpDateLV
Laut obigen Beispiel gibt es die Tabllentypen "VIEW", "TABLE", "
ACCESS TABLE" und "SYSTEM TABLE".
Nun ist es ein leichtes, nur die Tabellen anzuzeigen, die auch wirklich benötigt werden:
Delphi-Quellcode:
// analog zu oberem Beispiel
...
while not aSchema.EOF do
begin
if (aSchema.Fields.Item['TABLE_NAME'].Value)='TABLE') then
begin
with ListView1.Items.Add do
begin
Caption:=VarToStr(aSchema.Fields.Item['TABLE_NAME'].Value);
SubItems.Add(VarToStr(aSchema.Fields.Item['TABLE_TYPE'].Value));
end; // with
end; // if
aSchema.MoveNext;
end; // while