Im Datenbankfenster oder im Navigationsbereich von Access mögen Ihnen die ausgegrauten Bezeichnungen von Tabellen mit dem Präfix MSys schon aufgefallen sein. Dabei handelt es sich um Systemtabellen, ohne die Access nicht funktionieren könnte. Reißen wir kurz an, was sich hinter diesen ominösen Tabellen verbirgt und wie Sie sie gar gewinnbringend für eigene Zwecke verwenden.
Beispieldatenbank
Die Beispiele dieses Artikels finden Sie in der Datenbank 1412_Systemtabellen.accdb.
Wenn Sie unter Access eine Datenbank entwickeln, so sammeln sich Unmengen von Definitionsdaten an. Ob es sich um die Entwürfe von Tabellen oder Formularen handelt, das Anlegen von Beziehungen, oder den VBA-Code, für all diese Objekte sind Eigenschaften und Einstellungen zu speichern. Und das macht Access natürlich selbst wieder in Tabellen, die sich in der Diktion von Microsoft eben Systemtabellen nennen.
Ihre genaue Bedeutung, Funktionsweise und ihr Aufbau sind jedoch nicht dokumentiert, weshalb sich eine Menge von Access-Spezialisten um deren Aufklärung bemühte. Viel davon liegt noch im Verborgenen, weshalb es bisher noch keine Software gibt, die Access-Datenbanken in allen Details in ein anderes Format konvertieren könnte. Während die Office-Dateiformate etwa von Word und Excel seitens Microsoft weitgehend offen gelegt wurden, verschließt man sich bisher einer Dokumentation für das Access-Dateiformat.
Systemtabellen anzeigen
Alle Systemtabellen haben eines gemeinsam: Sie sind mit dem Tabellen-Präfix MSys ausgestattet und haben das Attribut System und Versteckt. Zwar lassen sie sich damit öffnen, jedoch weder im Entwurf ändern, noch bearbeiten. Datensätze können in der Regel nicht gelöscht oder hinzugefügt werden – Ausnahmen bestätigen die Regel.
Damit versteckte Objekte im Datenbankfenster oder Navigationsbereich angezeigt werden, sind unter Umständen ein paar Handgriffe nötig. Klicken Sie etwa auf die Titelzeile des Navigationsbereichs rechts und betätigen Navigationsoptionen….
Im nun erscheinenden Dialog haken Sie die Optionen Systemobjekte anzeigen und Ausgeblendete Objekte anzeigen an. Erst dann werden die Systemtabellen als graue Einträge aufgelistet, wie in Bild 1, wo Sie der übersicht halber in eine eigene Navigationsgruppe verfrachtet wurden.
Bild 1: MSys-Systemtabellen
Der Umfang dieser Systemtabellen hat sich über die Access-Versionen hinweg immer wieder geändert. Viele sind erst in den neueren Versionen hinzugekommen, andere wieder sind inzwischen weggefallen, weil sich die Funktionalität von Access umgekrempelt hat.
Manche sind grundsätzlich in allen Datenbanken zu finden, andere entstehen erst, wenn bestimmte Vorgänge in der Datenbank angestoßen werden. Auch die Relevanz ist unterschiedlich zu bewerten. Im Folgenden geht es daher um jene Tabellen, die besonders wichtig sind und außerdem jene, die sich für eigene Zwecke – sprich: Abfragen – verwenden lassen.
MSysObjects
Hier handelt es sich um eine immer präsente Systemtabelle, die ganz entscheidend ist, weil sie den Katalog der Objekte einer Datenbank enthält. Ganz egal, was Sie in Ihre Datenbank einbauen oder importieren, es dazu wird immer als Datensatz in der Tabelle erscheinen. Den Aufbau sehen Sie in Bild 2, und in Bild 3 ausschnittsweise die Anzeige in der Datenblattansicht (Beispieldatenbank). Jeder Datensatz beschreibt ein einzelnes Objekt. Die Erklärung der Felder in der Reihenfolge ihrer Bedeutung:
Bild 2: Datenblattansicht der Systemtabelle MSysObjects; einige irrelevante Spalten sind ausgeblendet
Bild 3: Systemtabelle MSysObjects
- Name ist die Bezeichnung des Objekts, wie Sie oder Access selbst sie für ein Objekt vergeben haben. In der Abbildung ist etwa das Formular frmBestellungenChart markiert.
- Id ist der Primärschlüssel des Datensatzes, der das Objekt damit eindeutiger kennzeichnet, als der Name.
- Type charakterisiert den Typ des Objekts, wobei hier Zahlenwerte verwendet werden. Der Wert -32768 etwa bedeutet immer Formular, eine 1 Tabelle, oder 4 eine verlinkte Tabelle. In der Tabelle tblObjektTypen der Beispieldatenbank finden Sie eine Aufstellung der wichtigsten Objekte und deren Typwerte.
- DateCreate, DateUpdate. Hier sind Erstell- und änderungsdatum des Objekts festgehalten.
- Connect ist ein String, der nur dann angegeben ist, wenn es sich beim Objekt um eine verknüpfte Tabelle handelt. Für Verknüpfungen zu Access-Datenbanken steht hier der Pfad zur Access-Datei, bei ODBC-Tabellen die Datenquelle oder deren Definition.
- ForeignName füllt sich ebenfalls nur bei verlinkten Tabellen. Dann steht hier der Tabellenname der Fremddatenbank, der ja vom Verknüpfungsnamen (Name) abweichen kann.
- Flags braucht eigentlich nicht weiter zu interessieren. Es ist eine Kombination von Attributkonstanten für ein Objekt, deren Anteile noch nicht aufgeklärt sind. Ob ein Objekt etwa versteckt ist, wird jedenfalls hier indiziert.
Bei den Lv-Feldern geht es um binäre Daten, die eine proprietäre Satzbeschreibung haben, deren Aufbau weitgehend unbekannt ist und deren Bedeutung je nach Objekttyp variiert.
Meist sind hier zusätzliche Interna und Eigenschaften des Objekts gespeichert. LvProp aber beschreibt die angelegten Eigenschaften eines Objekts, welche auch über die Properties-Auflistung eines Objekts in VBA zu erhalten sind.
ParentId ist ein Verweis auf einen anderen Datensatz der Tabelle. Imgrunde ist sie rekursiv angelegt. Betrachten Sie die ParentId des Formulars frmBestellungenChart, so verweist sie auf den Datensatz mit der gleichwertigen Id und dem Namen Forms. Hier handelt es sich nicht um ein reales Objekt, sondern um ein Auflistungsobjekt – quasi die Kategorie des Objekts. Mithilfe der ParentID kann also im Verein mit Type die Zugehörigkeit eines Datenbankobjekts zu einer Objektkategorie festgestellt werden.
Die weiteren Felder der Systemtabelle haben nur Bedeutung im Zusammenhang mit ODBC-Datenbanken; wir schenken ihnen an dieser Stelle keine weitere Beachtung.
MSysObjects auswerten
Die Daten der Systemtabelle können unter keinen Umständen direkt verändert werden, aber als Grundlage für lesende Abfragen ist sie selbstverständlich nutzbar.
Normalerweise gelangen Sie an die Liste der in der Datenbank enthaltenen Tabellen nur über VBA und die Bibliothek DAO, indem entweder die TableDefs– oder die Containers-Auflistung durchlaufen wird. Durch MSysObjects wird das viel einfacher. Legen Sie eine Abfrage an, fügen die Systemtabelle ein und filtern Sie sie nach dem Wert von Type, wobei als Kriterium =1 einzutragen wäre. Oder listen Sie alle Formulare der Datenbank auf, indem Sie als Kriterium für Type die -32.768 angeben. In Bild 4 sehen Sie Entwurf und SQL-Ausdruck dieser Abfrage, sowie das Ergebnis. Eine alternative Abfrage, die zum gleichen Ergebnis führt, zeigt Bild 5, wo die Hilfstabelle tblObjektTypen herangezogen wird. Auf ähnliche Weise können Sie mit MSysObjects alle anderen Objekttypen abfragen.
Bild 4: Alternative Abfrage zur Auflistung der Formulare
Bild 5: Formulare der Datenbank über MSysObjects auswerten und anzeigen
Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein: