Individueller Standarddatenbankordner je Datenbank

Eines ärgert mich bereits seit Jahrzehnten: Dass man beim Importieren von Objekten aus anderen Datenbanken über den Assistenten immer wieder neu zum jeweiligen Verzeichnis wechseln muss. Dort ist immer das gleiche Verzeichnis voreingestellt. Dieses kann man zwar ändern und so passend für einen Anwendungszweck in einer Datenbank gestalten, aber beim Importieren in die nächste Datenbank muss man das Verzeichnis wieder neu selektieren. Wie schön wäre es, wenn dieser Ordner zumindest immer auf den Ordner eingestellt wird, in dem sich die aktuelle Datenbank befindet. Noch praktischer wäre es, wenn man für jede Anwendung einen individuellen Ordner einstellen könnte, der automatisch beim Öffnen der Anwendung bereitgestellt wird. Die gute Nachricht ist: Wir haben eine Lösung dafür gefunden, die wir in diesem Beitrag vorstellen – damit sind die beiden genannten Varianten möglich! Wie es geht, lesen Sie auf den folgenden Seiten.

Wo wirkt sich der Standarddatenbankordner aus?

Wenn wir Access öffnen, ohne jemals den Standarddatenbankordner geändert zu haben, ist dieser auf den Dokumentenordner des jeweiligen Benutzers eingestellt. Diese Einstellung können wir im Optionen-Dialog von Access auf der Registerseite Allgemein im Bereich Datenbanken erstellen bearbeiten. Die Option heißt Standarddatenbankordner und wir können diese sowohl durch direkte Eingabe oder auch durch Auswahl eines neuen Verzeichnisses über den Durchsuchen…-Button ändern (siehe Bild 1).

Der Standarddatenbankordner in den Access-Optionen

Bild 1: Der Standarddatenbankordner in den Access-Optionen

Hier sehen wir bereits eine Funktion dieses Ordners: Er wird standardmäßig beim Anlegen neuer Datenbankdateien als Zielverzeichnis angegeben (siehe Bild 2).

Ein Einsatzzweck des Standarddatenbankordners: Das Anlegen neuer Datenbanken

Bild 2: Ein Einsatzzweck des Standarddatenbankordners: Das Anlegen neuer Datenbanken

Und natürlich erscheint dieser Ordner, wenn wir Objekte aus einer anderen Access-Datenbank über den Ribbonbefehl Externe Daten|Neue Datenquelle|Aus Datenbank|Access importieren oder verknüpfen wollen (siehe Bild 3).

Auch im Dialog Externe Daten - Access-Datenbank erscheint der Standarddatenbankordner.

Bild 3: Auch im Dialog Externe Daten – Access-Datenbank erscheint der Standarddatenbankordner.

Es gibt noch andere Dialoge und Orte, an denen der Ordner c:\Users\\Documents erscheint, aber nur in den oben genannten wirkt es sich aus, wenn wir den Standarddatenbankordner anpassen!

Zu guter Letzt noch eine Stelle, wo dieser Ordner verwendet wird: Nämlich als Ergebnis der VBA-Funktion CurDir.

Manuelles Ändern des Standarddatenbankordners

Wir können diesen Ordner auf verschiedene Arten ändern:

  • Die erste Möglichkeit ist der bereits oben erwähnte Optionen-Dialog von Access. Diese Änderung ist dauerhaft und wirkt sich erst nach dem Schließen und erneutem Öffnen von Access aus.
  • Die zweite Möglichkeit ist die VBA-Prozedur ChDir. Diese wirkt sich jedoch nur auf die Funktion CurDir aus und wird beim nächsten Start von Access wieder zurückgesetzt.
  • Die dritte Möglichkeit ist eine weitere VBA-Methode namens SetOption, die wir gleich vorstellen.

Standarddatenbankordner per SetOption einstellen

Die oben genannte dritte Variante ist die Verwendung der Anweisung SetOption. Damit können wir den Standarddatenbankordner wie folgt einstellen:

SetOption "Default Database Directory", "c:\"

Zum Auslesen des aktuell eingestellten Standarddatenbankordners verwenden wir GetOption:

Debug.Print GetOption("Default Database Directory")

Allerdings wirkt sich auch diese Einstellung nicht unmittelbar auf den Importdialog für Access-Objekte aus, sondern erst nach dem Schließen und erneutem Start von Access.

Also hilft uns dieser Befehl an dieser Stelle auch nicht weiter – auch wenn das die optimale Lösung gewesen wäre. Wir hätten dann einfach den Befehl zum Öffnen des Importdialogs für Access-Objekte im Ribbon so erweitern können, das zusätzlich noch die Zuweisung des gewünschten Pfades erfolgt. So müssen wir uns einen anderen Weg überlegen, wie wir sicherstellen können, dass unser gewünschtes Verzeichnis je nach Anwendung angezeigt wird. Die Ziele sehen dabei wie folgt aus:

  • Wenn kein explizites Verzeichnis für die Datenbank festgelegt ist, soll das Verzeichnis der aktuellen Datenbank als Standarddatenbankordner verwendet werden.
  • Wir wollen aber auch individuell je Datenbank ein eigenes Verzeichnis festlegen können, das jeweils eingestellt wird, wenn wir diese Datenbank öffnen.

Wenn wir zum Beispiel immer wieder Tabellen aus Datenbanken des gleichen Verzeichnisses importieren, können wir dieses Verzeichnis einmalig einstellen.

Aber dann wird dieses Verzeichnis auch für jede andere Datenbank eingestellt. Sollten wir also eine zweite Datenbank verwenden, wo wir auch Tabellen aus einer anderen Datenbank importieren wollen, müssen wir spätestens hier wieder umstellen beziehungsweise immer wieder neu zum gewünschten Ordner navigieren.

Wo wird der Standarddatenbankordner gespeichert?

Wenn wir die Einstellung Standarddatenbankordner über die Access-Optionen ändern, wird diese Änderung in der Registry gespeichert. Den genauen Ort zeigt Bild 4.

Der Standarddatenbankordner wird in der Registry gespeichert.

Bild 4: Der Standarddatenbankordner wird in der Registry gespeichert.

Standardverzeichnis für andere Dialoge

Die anderen Dialoge, zum Beispiel zum Einlesen von Textdateien oder Excel-Dateien, berücksichtigen die Einstellung des Standarddatenbankordner übrigens gar nicht. Hier sehen wir auch aktuell keine Möglichkeit, in irgendeiner Weise Einfluss zu nehmen.

Anpassen des Datenbankordners bei Start der Anwendung

Aber wie wollen wir dafür sorgen, dass entweder das aktuelle Datenbankverzeichnis (mit CurrentProject.Path) oder ein speziell für die Datenbank festgelegtes Verzeichnis bereits eingestellt ist, wenn wir die entsprechende Datenbank öffnen? Das erledigen wir mit einem COM-Add-In namens amvStartupfolderr.

Installation des COM-Add-Ins

Sie finden im Download die entsprechende DLL namens amvStartupfolder_32.dll beziehungsweise amvStartupfolder_64.dll. Diese installieren Sie, indem Sie die folgenden Schritte durchführen:

  • Kopieren Sie die DLL in ein geeignetes Verzeichnis, beispielsweise in das Add-In-Verzeichnis. Wie Sie dieses am einfachsten ermitteln, erfahren Sie in diesem Beitrag: Add-In-Verzeichnis mit Wizhook ermitteln (www.access-im-unternehmen.de/1553)
  • Dann klicken Sie auf Datei|Optionen, um die Access-Optionen zu öffnen.
  • Wechseln Sie hier zum Bereich Add-Ins und klicken dann auf die Schaltfläche Los… neben dem Kombinationsfeld Verwalten.
  • Im nun erscheinenden Dialog COM-Add-Ins klicken Sie auf die Schaltfläche Hinzufügen… und wählen die Datei amvStartupFolder_win32.dll oder amvStartupFolder_win64.dll (je nach Bitness der Office-Version) aus dem Add-In-Verzeichnis aus (siehe Bild 5).
  • Hinzufügen eines COM-Add-Ins

    Bild 5: Hinzufügen eines COM-Add-Ins

  • Danach wird das neue COM-Add-In in der Liste angezeigt (siehe Bild 6).
  • Das neue COM-Add-In im COM-Add-Ins-Dialog

    Bild 6: Das neue COM-Add-In im COM-Add-Ins-Dialog

Damit ist das COM-Add-In installiert und einsatzbereit.

Einsatz von amvStartupfolder

Das COM-Add-In scheint erst einmal unsichtbar zu sein. Wie können es aber schon testen, indem wir einmal eine neue Access-Anwendung öffnen.

Wichtig: Diese Access-Anwendung muss per Doppelklick auf den Namen der .accdb-Datei geöffnet werden! Wenn Sie erst Access starten und dann die Datenbank laden, funktioniert das COM-Add-In nicht. Woran das liegt, erläutern wir später. Das COM-Add-In ist nun noch nicht aktiviert, denn es wird erst beim nächsten Start von Access geladen.

Wenn wir dann zu den Access-Optionen wechseln, sehen wir in der Eigenschaft Standarddatenbankordner bereits genau das Verzeichnis, in dem sich die aktuelle Datenbank befindet.

Und auch wenn wir den Import-Assistent für Access starten, zeigt dieser direkt dieses Verzeichnis an.

Damit funktioniert bereits die erste Anforderung, dass das aktuelle Datenbankverzeichnis als Standarddatenbankordner verwendet wird.

Standarddatenbankordner individuell einstellen

Damit kommen wir zur zweiten Anforderung. Wir hatten formuliert, dass wir zu jeder Datenbankdatei einen individuellen Standarddatenbankordner definieren können wollen. Aber wo tun wir das? Dazu öffnen wir den Ribbon-Reiter Datei und klicken auf den nun sichtbaren Eintrag amvStartverzeichnis.

Danach erscheint der entsprechende Bereich, in dem wir mit dem Button Auswählen einen Dialog zum Auswählen des gewünschten Verzeichnisses finden (siehe Bild 7).

Einstellen des gewünschten Standarddatenbankordners

Bild 7: Einstellen des gewünschten Standarddatenbankordners

Hier finden wir auch gleich den Hinweis, dass bei leerem Feld der aktuelle Ordner der Datenbank als Standarddatenbankordner verwendet wird.

Nachdem wir das Verzeichnis angegeben haben, können wir Access mit dieser Datenbank neu starten. Und siehe da: Wir finden in den Access-Optionen nun den neuen Ordner vor und können diesen auch direkt im Import-Assistenten für Access nutzen.

Das beweist aber noch lange nichts. Wir müssen zunächst noch eine zweite Datenbank mit einem individuellen Standarddatenbankordner versehen. Wenn wir diese öffnen, finden wir wieder eine leere Eigenschaft Startverzeichnis im Bereich amvStartverzeichnis vor. Das zeigt schon einmal, dass noch kein individueller Standarddatenbankordner festgelegt wurde. Fügen wir also einen passenden Ordner hinzu, der sich von dem der vorherigen Datenbank unterscheidet.

Öffnen wir nun nacheinander diese beiden Datenbanken, finden wir jeweils den dafür festgelegten Standarddatenbankordner vor – ohne selbst etwas dazu beigetragen zu haben.

Beschreibung des COM-Add-Ins amvStartupfolder

Damit kommen wir zum eigentlichen Know-how dieses Beitrags: Die Funktionsweise des COM-Add-Ins. Dieses haben wir, wie immer, mit twinBASIC erstellt. Den Download der aktuellen Version finden Sie hier:

https://github.com/twinbasic/twinbasic/releases

Das Projekt haben wir dem Download zu diesem Artikel unter dem Namen amvStartverzeichnis.twinproj beigelegt. Dieses können Sie nach dem Start von twinBASIC öffnen.

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

Schreibe einen Kommentar