In der Tabelle MSysObjects verwaltet Access Informationen zu den in der Datenbank enthaltenen Objekten. Diese Tabelle kann sich als echte Hilfe erweisen: Sie liefert, mit der richtigen Abfrage angesprochen, beispielsweise alle Tabellen der Datenbank oder auch alle Objekte der anderen Objekttypen wie Abfrage, Formulare, Berichte et cetera. Dieser Beitrag zeigt, was Sie alles mit der Tabelle MSysObjects anfangen können.
Die Tabelle MSysObjects finden
Um den vorliegenden Beitrag nachvollziehen zu können, müssen Sie sich erst einmal Zugriff auf die Tabelle MSysObjects verschaffen. Diese zeigt Access nämlich standardmäßig gar nicht im Datenbankfenster beziehungsweise im Navigationsbereich an.
Unter Access 2007 und neuer aktivieren Sie die Anzeige der Systemtabellen wie folgt:
- Klicken Sie mit der rechten Maustaste auf die Titelleiste des Navigationsbereichs.
- Wählen Sie dort den Eintrag Navigationsoptionen aus.
- Aktivieren Sie im nun erscheinenden Dialog die Option Systemobjekte anzeigen (s. Bild 1).
Bild 1: Dialog zum Aktivieren der Anzeige der Systemtabellen von Access
Anschließend erscheinen die Systemtabellen bereits im Navigationsbereich (s. Bild 2). Wenn Sie im vorherigen Dialog noch die Option Ausgeblendete Objekte anzeigen aktivieren, erscheinen noch weitere Tabellen – für die Anzeige der Tabelle MSysObjects reicht jedoch das Aktivieren von Systemobjekte anzeigen.
Bild 2: Systemtabellen im Navigationsbereich
MSysObjects per VBA öffnen
Wenn die Systemobjekte derzeit ausgeblendet sind und Sie keine Lust haben, diese für einen kurzen Blick in die Tabelle MSysObjects über die Navigationsoptionen einzublenden, öffnen Sie die Tabelle einfach per VBA.
Dazu setzen Sie einfach die folgende Anweisung im Direktbereich des VBA-Editors (Strg + G) ab:
DoCmd.OpenTable "MSysObjects"
Die Tabelle erscheint daraufhin in der Datenblattansicht – hier mit einigen ausgeblendeten Feldern (s. Bild 3). Insgesamt enthält die Tabelle folgende Felder, einige davon nehmen wir später unter die Lupe:
Bild 3: Einige Einträge der Systemtabelle MSysObjects
- Connect (Memo)
- Database (Memo)
- DateCreate (Datum)
- DateUpdate (Datum)
- Flags (Long)
- ForeignName (Text)
- Id (Long)
- Lv (OLE-Objekt)
- LvExtra (OLE-Objekt)
- LvModule (OLE-Objekt)
- LvProp (OLE-Objekt)
- Name (Text)
- Owner (Binary)
- ParentId (Long)
- RmtInfoLong (OLE-Objekt)
- RmtInfoShort (Binary)
- Type (Integer)
In den folgenden Abschnitten beschreiben wir die nützlichsten Felder dieser Tabelle.
Felder, die hier nicht aufgeführt werden, sind in der Regel schlecht dokumentiert und werden daher hier nicht beschrieben.
Connect
Das Feld Connect enthält die Verbindungszeichenfolge, wenn das Objekt eine per ODBC verknüpfte Tabelle ist – also beispielsweise eine Tabelle, die auf einem SQL Server oder einem MySQL-Server liegt. Die Verbindungszeichenfolge wird hier im Klartext gespeichert, Sie sollten also tunlichst keine Benutzernamen oder Kennwörter angeben. Beispiel:
DRIVER={SQL Server};SERVER=MeinServer; DATABASE=MeineDatenbank;UID=MeinBenutzername; PWD=MeinKennwort;
Database
Wird eine Tabelle aus einer anderen Datenbank oder auch aus einer Textdatei oder einer Exceltabelle eingebunden, handelt es sich um eine Jet-Verknüpfung.
Eine solche speichert den Dateinamen der Quelldatei, also etwa einer Access-Datenbankdatei, einer Textdatei oder einer Excel-Datei, im Feld Database. Beispiel:
c:DatenbankenBeispiel.mdb
DateCreate und DateUpdate
Diese beiden Felder speichern das Datum der Erstellung des Objekts sowie der letzten Aktualisierung.
Flags
Das Feld Flags enthält einen Zahlenwert, der weitere Informationen über den Typ des Objekts liefert. Weitere Informationen zu den Werten dieses Feldes finden Sie weiter unten in Zusammenhang mit den verschiedenen Objekttypen.
ForeignName
Das Feld ForeignName findet für verknüpfte Tabellen Verwendung. Wenn Sie beispielsweise eine Tabelle namens tblTest einer anderen Datenbank mit der aktuellen Datenbank verknüpfen und es ist bereits eine Tabelle gleichen Namens vorhanden, erhält die Verknüpfung in der aktuellen Tabelle einen anderen Namen im Feld Name. ForeignName hingegen behält den Namen der Originaltabelle bei.
Id
Das Feld Id dient schlicht und einfach als eindeutiger Bezeichner und Primärschlüsselfeld für ein Objekt. Es ist jedoch nicht als Autowertfeld definiert.
Name
Das Feld Name enthält den Namen des Objekts, wie er auch im Datenbankfenster beziehungsweise Navigationsbereich erscheint.
ParentId
Das Feld ParentId enthält einen Long-Wert, der über das Feld Id auf einen übergeordneten Datensatz der Tabelle MSysObjects verweist. So enthalten dort beispielsweise alle Objekte des Typs Formular den gleichen Wert, den der Datensatz mit dem Wert Forms im Feld Name im Feld Id enthält.
Type
Dieses Feld speichert einen Zahlenwert, der dem Objekttyp entspricht. Auf diese Weise lassen sich beispielsweise Tabellen, Abfragen oder Formulare identifizieren. Mehr dazu weiter unten unter Objekte nach Objekttyp filtern.
Abfragen auf Basis der Tabelle MSysObjects
In den folgenden Abschnitten schauen wir uns einige Abfragen an, mit denen Sie wichtige Informationen aus der Tabelle MSysObjects ziehen können.
Interessant ist hier eigentlich nur der Weg, diese Tabelle verfügbar zu machen, wenn sie nicht im Datenbankfenster beziehungsweise Navigationsbereich angezeigt wird – sie erscheint dann nämlich auch nicht im Auswahldialog der Tabellen und Abfragen.
Dazu öffnen Sie eine neue Abfrage, schließen den Dialog Tabelle anzeigen und wechseln in die SQL-Ansicht. Dort tragen Sie einfach die folgende Abfrage ein (s. Bild 4):
Bild 4: Zugriff auf die Tabelle MSysObjects per Abfrage
SELECT * FROM MSysObjects;
Wenn Sie nun in die Entwurfsansicht wechseln, finden Sie dort auch die gewünschte Tabelle vor (s. Bild 5). Nun fügen Sie die benötigten Felder hinzu.
Bild 5: Abfrageentwurf mit der Tabelle MSysObjects
Objekte aus MSysObjects nach Änderungsdatum
Wenn Sie einmal ermitteln möchten, welche Objekte zuletzt geändert wurden, verwenden Sie die Abfrage qryZuletztGeaendert der Beispieldatenbank. Diese sieht im Entwurf wie in Bild 6 aus und zeigt die Felder Name, Type, DateCreate und DateUpdate an.
Bild 6: Sortieren der Objekte nach dem Änderungsdatum
Die Abfrage sortiert die Datensätze in absteigender Reihenfolge nach dem Feld DateUpdate.
Objekte aus MSysObjects nach Objekttyp filtern
Wenn Sie die Objekte nach Ihrem Typ filtern möchten, also etwa nach Tabelle, Abfrage, Formular et cetera, verwenden Sie hauptsächlich das Feld Type als Filterkriterium.
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
den kompletten Artikel im PDF-Format mit Beispieldatenbank
diesen und alle anderen Artikel mit dem Jahresabo