Makrothek
MS Access betrifft MS Access

Problembeschreibung:

Sie wollen Informationen über die Tabellen in der Datenbank sammeln, z. B. den Namen oder die Verknüpfungsinformation. Dies wird z. B. dann nötig, wenn Sie Routinen schreiben wollen, die universell auf Access-Tabellen und z. B. über ODBC verknüpfte Tabellen anwendbar sein sollen.

Lösungsidee

Die Informationen werden in einem Array gesammelt und können dann beliebig weiter verwendet werden. Der aufgelistet Code sammelt alle relevanten Tabellenobjekte in dem Array "Tabellen". Jeder Eintrag in diesem Array ist wiederum ein Array, das 3 Einträge enthält:

  1. den Tabellennamen
  2. die Attribute (z. B. ob es eine normale Tabelle oder eine verknüpfte Tabelle ist)
  3. den Connect-Pfad für eine verknüpfte Tabelle oder NULL, wenn es eine normale Tabelle ist

Programmcode


  'Code zum Ermitteln des Tabellennamens, des Verknüpfungstyps und des Verknüpfungspfads
  'Die Tabellennamen werden in einem Array gespeichert:
  'Array = ( 0 => array ( 0 => Name, 1=> Attribute, 2=>Verknüpfungseigenschaft oder NULL))

  Dim db As Database            'Datenbankobjekt
  Dim Tabelle As TableDef       'Tabellenobjekt
  Dim Tabellen() As Variant     'Speicherarray
  Dim Anzahl As Long            'Zähler
  Dim Test As Variant           'Testausgabe

  'Datenbankobjekt ermitteln
  Set db = CurrentDb
  Anzahl = -1
  'Jede Tabelle - auch die Systemtabellen - in der Datenbank durchgehen
  For Each Tabelle In db.TableDefs
    'Natürlich nur normale und verknüpfte Tabellen ermitteln, keine versteckten oder Systemtabellen
    If (Tabelle.Attributes And (dbSystemObject Or dbHiddenObject)) = 0 Then
      'Tabelle in Speicherarray aufnehmen
      'Zuerst Array dynamisch erweitern
      Anzahl = Anzahl + 1
      ReDim Preserve Tabellen(0 To Anzahl) As Variant
      Tabellen(Anzahl) = Array(Tabelle.Name, Tabelle.Attributes, Tabelle.Connect)
    End If
    'nächste Tabelle
  Next Tabelle

  'Speicher wieder freigeben
  Set db = Nothing

  'Kontrollausgabe
  For Each Test In Tabellen
    MsgBox Test(0) & Chr(13) & Chr(10) & Test(1) & Chr(13) & Chr(10) & Test(2), vbOKOnly + vbInformation
  Next Test