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:
- den Tabellennamen
- die Attribute (z. B. ob es eine normale Tabelle oder eine verknüpfte Tabelle ist)
- 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