Dass sich Access-Datenbanken mit der Zeit aufblähen, dürfte jedem Entwickler einmal aufgefallen sein. Beim Löschen von Daten und Objekten, dem Importieren von Objekten aus anderen Datenbanken, Modifikationen an Modulen, dem überschrieben von Objekten, fällt Müll an, der oberflächlich nicht sichtbar ist. über die Ribbon-Funktion Komprimieren und Reparieren kann aber ein Teil dieses Mülls leider nicht entfernt werden. Mit recht überschaubarem VBA-Code ändert sich das.
Beispieldatenbank
Die Beispiele dieses Artikels finden Sie in der Datenbank 1606_Saeubern.accdb.
Temporäre Datenbankobjekte
Access-Datenbanken können sowohl Tabellen, wie Abfragen, enthalten, die Sie im Navigationsbereich nicht zu Gesicht bekommen. Auf diese möchten wir hier den Fokus setzen.
Die Beispieldatenbank implementiert vier relational verknüpften Tabellen zu Kundenadressen. Auf diese setzt das Formular frmKunden auf (Bild 1). Die Haupttabelle tblKunden steht für die Datenherkunft des Formulars, die Detailtabellen tblAnreden, tblOrte und tblLaender werden für die Kombinationsfelder verwendet. Die Steuerelemente kamen durch einfaches Hineinziehen der Vorhandenen Datenfelder zustande. Kombinationsfelder ergeben sich deshalb, weil für die Felder IDAnrede, IDOrt und IDLand im Entwurf von tblKunden jeweils Nachschlagetabellen angegebenen wurden. Also füllt Access hier im Eigenschaftenblatt neben dem Steuerelementinhalt auch gleich die passenden Quelltabellen ein und verknüpft die Felder, wie dies aus der Abbildung hervorgeht.
Bild 1: Das Kundenformular enthält drei Kombinationsfelder, deren Datenherkunft auf den entsprechenden Detailtabellen basiert
Grundsätzlich legt Access nun beim Speichern sowohl für das Formular, wie auch für Kombinations- und Listenfelder intern Abfragen an, die weder im Navigationsbereich, noch im Formularentwurf in Erscheinung treten. Doch öffnen Sie einmal die Systemtabelle MSysObjects, die einen Katalog aller Datenbankobjekte verzeichnet. Bild 2 zeigt, dass hier vier Abfragen zu sehen sind. Sie werden durch die Spalte Type identifiziert, wenn diese den Wert 5 aufweist. Für die Namen der Abfragen ist jeweils das Präfix ~sq_ spezifiziert. Folgt darauf ein f, so handelt es sich um die Datenherkunft eines Formulars. Access verwendet also nicht die Tabelle tblKunden selbst, sondern eine auf ihr beruhende Abfrage für die Daten des Formulars. Der Name des Formulars schließt sich daran an. Für die Datenherkunft von Kombinationsfeldern steht eine ~sq_c…-Abfrage. Ihr folgt der Name des Formulars, in dem sich das Kombinationsfeld befindet, und schließlich der Name des Steuerelements, ebenfalls durch ein ~sq_c-Präfix gekennzeichnet.
Bild 2: In der Systemtabelle MSysObjects finden sich die versteckten Abfragen für die Kombinationsfelder des Formulars, beginnend jeweils mit dem Präfix ~sq_
Diese Abfragen sind über die Oberfläche nicht zu erreichen, wohl aber über DAO! Geben Sie so etwa den SQL-String für die dem Anrede-Steuerelement zugrundeliegende Abfrage im VBA-Direktfenster aus:
CurrentDB.QueryDefs _ (" ~sq_cfrmKunden~sq_cIDAnrede").SQL
Sie erhalten dieses Ergebnis:
SELECT DISTINCTROW * FROM tblAnreden;
Das Formular hat diese Datenherkunft:
CurrentDB.QueryDefs _ ("~sq_ffrmKunden").SQL > "SELECT DISTINCTROW * FROM tblKunden;"
Das DISTINCTROW sagt der Database Engine, dass die zurückgelieferten Datensätze eindeutig sein sollen. Das ist an sich überflüssig, da die Tabellen allesamt einen Primärschlüssel aufweisen.
Entfernten Sie diesen später aber, so könnten auch doppelte identische Datensätze in ihr abgespeichert werden. Hier bekommt das DISTINCTROW dann einen Sinn.
Diese internen Abfragen sind übrigens nicht schreibgeschützt. Sie können ihren SQL-Ausdruck problemlos ändern; etwa so:
CurrentDB.QueryDefs _ ("~sq_ffrmKunden").SQL = _ "SELECT * FROM tblKunden"
Diese änderung bleibt auch nach Modifikationen am Formularentwurf erhalten! Es versteht sich von selbst, dass Sie hier nicht unsinnige Ausdrücke einsetzen sollten, um Probleme zu vermeiden.
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: