Einzelnen Beitrag anzeigen

Benutzerbild von Gollum
Gollum

Registriert seit: 14. Jan 2003
Ort: Boxberg
456 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

Re: Über ADOX kein Zugriff auf Tabellenanzahl od. -felder

  Alt 13. Aug 2004, 07:58
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
  Mit Zitat antworten Zitat