Datenbanken von Altlasten säubern

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

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.

Das Kundenformular enthält drei Kombinationsfelder, deren Datenherkunft auf den entsprechenden Detailtabellen basiert

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.

In der Systemtabelle MSysObjects finden sich die versteckten Abfragen für die Kombinationsfelder des Formulars, beginnend jeweils mit dem Präfix ~sq_

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:

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar