Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 5/2011.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Wandeln Sie eine bestehende Lösung in ein Access-Add-In um und ergänzen Sie den resultierenden SQLDump-Assistenten um weitere Funktionen.

Techniken

Add-Ins, SQL

Voraussetzungen

Access 2000 und höher

Beispieldateien

SQLDump.mda

Shortlink

www.access-im-unternehmen.de/800

SQLDump-Assistent

André Minhorst, Duisburg

Hin und wieder benötigt man Code, um eine Tabelle zur Laufzeit erstellen zu können. Das geht am einfachsten mit den Data Definition Language (DDL)-Befehlen von SQL. Dummerweise verwendet man diese in der Regel recht selten, sodass dies selten ohne Recherche in der Onlinehilfe oder sonstigen Quellen funktioniert. In einem früheren Beitrag haben wir bereits die Techniken für das automatische Erstellen solcher Skripte auf Basis bestehender Tabellen vorgestellt. Warum also nicht einfachen einen Assistenten erstellen, der diese Funktion ständig verfügbar macht?

Der Beitrag, auf den sich die Einleitung bezieht, heißt SQL-Datenbankschema auslesen und ist unter www.access-im-unternehmen.de/698 zu finden. Die dort vorgestellte Lösung umfasst ein Formular, mit dessen Kombinationsfeld Sie eine der Tabellen der aktuell geöffneten Datenbank auswählen können. Nach der Auswahl zeigt das Formular in einem Textfeld den SQL-Code an, der zum Erstellen dieser Tabelle nötig wäre.

Wenn Sie also keine große Lust haben, selbst den SQL-Ausdruck zusammenzustellen, sollten Sie einfach dieses Formular einsetzen. Dummerweise müssen Sie dieses dazu erst in die aktuelle Datenbank kopieren (zuzüglich einiger VBA-Module mit weiteren Funktionen), gegebenenfalls fehlende Verweise hinzufügen, das Formular manuell öffnen und so weiter.

Viel schöner wäre es doch, wenn Sie das Formular nicht erst integrieren, sondern dieses ganz einfach von jeder beliebigen Datenbank aus per Menüeintrag öffnen können! Kein Problem: Dafür gibt es schließlich Access-Add-Ins - Sie müssen die bestehende Lösung nur in ein Add-In umwandeln. Der vorliegende Beitrag zeigt, wie Sie dies erledigen und außerdem noch einige interessante Features hinzufügt.

Abb. 1 zeigt schon einmal, wie der SQLDump-Assistent in Aktion aussieht. Sie können damit eine der Tabellen der aktuell geöffneten Datenbank auswählen und einen oder mehrere SQL-Anweisungen erstellen lassen, mit denen Sie die ausgewählte Tabelle nachbauen können. Dies gilt für die per SQL erreichbaren Features - Funktionen wie etwa die von Nachschlagefeldern lassen sich damit leider nicht umsetzen. Vielleicht wäre das aber etwas für eine erweiterte Fassung dieses Assistenten.

pic001.png

Abb. 1: Der SQLDump-Assistent in Aktion

Von der .mdb- zur .mda-Datenbank

Um eine .mdb-Datei in eine .mda-Datei umzuwandeln, erledigen Sie zunächst einmal das Offensichtliche: Sie ändern die Dateiendung von .mdb in .mda. Das macht aus der Datenbankanwendung noch kein Access-Add-In, aber zumindest würde es nun schon einmal vom Add-In-Manager erkannt werden.

Ein Access-Add-In zeichnet sich aber auch dadurch aus, dass bestimmte Einträge in der Registry dafür sorgen, dass Access beim Start von dessen Existenz erfährt und an entsprechender Stelle die Möglichkeit zum Starten dieses Add-Ins anbietet.

In der Regel werden diese Einträge durch den Add-In-Manager von Access angelegt, den Sie etwa unter Access 2007 und neuer über den Ribbon-Eintrag Datenbanktools|Add-Ins|Add-In-Manager starten. Dieser führt zwei Dinge durch:

  • Er kopiert die .mda- oder .accda-Datenbank in den Add-Ins-Ordner von Access.
  • Er trägt die in der Tabelle USysRegInfo enthaltenen Daten in der Registry ein.

Dazu bereiten wir nun zunächst die Tabelle USysRegInfo vor, die wie in Abb. 2 aussieht. Die Tabelle brauchen Sie nicht selbst zu erstellen, sondern kopieren diese aus der Beispieldatenbank zu diesem Beitrag. Die Tabelle enthält die folgenden Informationen:

pic002.png

Abb. 2: Die Tabelle USysRegInfo für den SQLDump-Assistenten

  • HKEY_CURRENT_ACCESS_PROFILE\Menu Add-Ins\SQLDump gibt an, an welche Stelle in der Registry die in den übrigen Feldern enthaltenen Informationen geschrieben werden sollen. HKEY_CURRENT_ACCESS_PROFILE wird dabei automatisch durch den der aktuellen Access-Version entsprechenden Pfad ersetzt, zum Beispiel HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Access\.
  • Der erste Eintrag mit dem Wert 0 im Feld Type sorgt dafür, dass der Root-Eintrag für dieses Add-In vorgenommen wird.
  • Der zweite Eintrag fügt ein Element namens Description mit einer kurzen Beschreibung hinzu.
  • Der dritte Eintrag fügt ein Element namens Library hinzu, in diesem Fall |ACCDIR\SQLDump.mda. Der Ausdruck |ACCDIR wird durch das Add-In-Verzeichnis ersetzt, in das der Add-In-Manager die Datenbankdatei kopiert hat. Dieser Information benötigt Access beim Start, damit es weiß, in welcher Datei sich die Add-In-Funktionen befinden.
  • Fehlt noch der letzte Eintrag namens Expression. Hier tragen Sie den Namen einer Funktion ein, die das Add-In startet. In diesem Fall heißt die Funktion Autostart, also tragen Sie =Autostart() ein.

Nach dem Installieren des Add-Ins mit dem Add-In-Manager finden Sie in der Registry (anzuzeigen mit Windows|Ausführen/Suchen|RegEdit) einige neue Einträge wie die aus Abb. 3 vor.

pic003.png

Abb. 3: Registry-Einträge für das SQLDump-Add-In

Nach der Installation befindet sich außerdem ein neuer Eintrag in der Liste der Menü-Add-Ins, also direkt unterhalb des Eintrags zum Starten des Add-In-Managers.

Startfunktion des Add-Ins

Da die Anwendung bereits ein Formular namens frmDDL enthält, das beim Aufruf des Add-Ins über den entsprechenden Menüeintrag angezeigt werden soll, brauchen Sie dieses nur noch mit der angegebenen Startfunktion zu öffnen.

Dies erledigt die folgende Prozedur:

Public Function Autostart()

    DoCmd.OpenForm "frmDDL", WindowMode:=acDialog

End Function

Kleine Änderungen

Bislang war das Formular frmDDL dazu ausgelegt, die Tabellen der lokalen Datenbank anzuzeigen. Dabei reichte es, dem Kombinationsfeld zur Auswahl der Tabellen eine Abfrage als Datensatzherkunft zuzuweisen, welche die Tabellennamen aus der Systemtabelle MSysObjects enthält.

Bei einem Add-In ist das genauso, und das ist das Problem: Es zeigt Daten aus der Tabelle MSysObjects an, aber nicht aus der in der betroffenen Datenbankanwendung, sondern aus der Add-In-Datenbank. Damit das Kombinationsfeld die Tabellen der lokalen Tabelle anzeigt, haben wir dem Add-In eine Funktion hinzugefügt, welche die Tabellen der Host-Anwendung anzeigt, also der Datenbank, von der aus Sie das Add-In geöffnet haben.

Außerdem haben wir dem Formular eine Schaltfläche hinzugefügt, mit der Sie den angezeigten SQL-Code direkt in die Zwischenablage kopieren können.

Zusammenfassung und Ausblick

Der SQLDump-Assistent kommt sicher nicht täglich zum Einsatz, aber wenn Sie einmal den SQL-Code zum Erstellen einer Tabelle benötigen, die bereits vorhanden ist, hilft er schnell und und unkompliziert. Und selbst wenn die Tabelle noch nicht vorhanden ist, haben Sie diese wahrscheinlich schneller selbst erstellt und mit dem SQLDump-Assistenten analysiert, als den DDL-Code von Hand zusammenzustellen.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Download

Download

Die .zip-Datei enthält folgende Dateien:

SQLDump.mda

Beispieldateien downloaden

© 2003-2015 André Minhorst Alle Rechte vorbehalten.