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

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

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:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 3/2013.

Diesen Artikel jetzt als PDF plus Beispieldatenbank herunterladen?

Wenn Sie sich jetzt für den Newsletter anmelden, erhalten Sie in Kürze eine E-Mail mit dem Artikel im PDF-Format plus Beispieldatenbank.

Hier anmelden:1370291632

E-Mail:

Anrede:

Vorname:

Nachname:

Zusammenfassung

Lernen Sie, wie Sie Funktionen, Formulare und weitere Features von Add-In-Datenbanken von einer Host-Anwendung aus nutzen können.

Techniken

Add-Ins, VBA

Voraussetzungen

Access 2000

Beispieldateien

Start.mdb, Ziel.mda

Shortlink

www.access-im-unternehmen.de/886

Funktionen aus anderen Datenbanken

André Minhorst, Duisburg

Manche Funktionen benötigen Sie nicht nur in einer, sondern in mehreren Datenbanken. Sie können die Funktion dann in die jeweiligen Datenbanken kopieren und dort nutzen. Dies bringt allerdings einigen Mehraufwand bei der Pflege der Funktion mit sich: Wenn Sie etwa einen Fehler beheben, müssen Sie dies gleich für mehrere Datenbanken erledigen. Beim zentralen Speichern der Funktion in einer einzigen Datenbankdatei brauchen Sie Änderungen nur an einer einzigen Stelle durchzuführen. Und es gibt noch weitere Vorteile und Anwendungszwecke - mehr dazu im vorliegenden Beitrag.

Der Grund dafür, die in diesem Beitrag vorgestellten Techniken zu verwenden, ist die Lösung aus einem anderen Beitrag namens Alle Datenbanken einlesen und anzeigen (www.access-im-unternehmen.de/888). Dort stellen wir ein Add-In vor, mit dem Sie den Pfad zu einer bestimmten Access-Datenbank ermitteln können. Dabei liefert das Add-In nur die Verzeichnisse, in denen sich auch tatsächlich Access-Datenbankdateien befinden.

Das Problem dieses Add-Ins und von Add-Ins im Allgemeinen ist: Es gibt keinen einfachen Weg, die enthaltenen Funktionen aufzurufen und die Ergebnisse direkt etwa per VBA in ein Textfeld zu schreiben. Gerade beim Ermitteln von Verzeichnissen und Datenbankdateien wäre dies aber sinnvoll - anderenfalls müsste man immer den Pfad aus dem Add-In-Formular kopieren und an der gewünschten Stelle eintragen. Außerdem lassen sich Add-Ins und ihre Funktionen nur über genau definierte Schnittstellen aufrufen - beispielsweise über das Add-Ins-Menü oder als Objekt- oder Steuerelement-Assistent. Wenn Sie die Funktion aber etwa über die neben einem Textfeld platzierte Schaltfläche aufrufen und das Ergebnis in das Textfeld eintragen möchten, müssen Sie selbst eine Lösung per VBA erstellen.

Dies ist, um beim Beispiel der Datenbankauswahl zu bleiben, auch kein Problem - Sie brauchen einfach nur alle Objekte der Add-In-Datenbank in die Zieldatenbank zu kopieren und die dort enthaltene Funktion zum Starten des Add-Ins aufzurufen. Praktischer wäre es dennoch, wenn Sie eine solche Funktion an zentraler Stelle vorhalten und aufrufen könnten, statt diese in mehrere Datenbanken zu integrieren und dort auch separat pflegen zu müssen.

Der Ansatz

Der nachfolgend vorgestellte Ansatz basiert grundsätzlich darauf, eine Bibliotheksdatenbank mit allgemeinen Funktionen in die Zieldatenbank einzubinden und die Funktionen der Bibliotheksdatenbank in der Zieldatenbank verfügbar zu machen. Allerdings ist für diese Vorgehensweise ein fester Verweis auf die Bibliotheksdatenbank nötig. Verschieben Sie die Funktionsbibliothek, liefert die Zieldatenbank beim Aufruf einer der Funktionen einen Fehler.

Bei der in diesem Beitrag verwendeten Technik wird die Bibliotheksdatenbank quasi per Late Binding referenziert, also erst kurz vor dem Zugriff auf die enthaltenen Funktionen. Das bedeutet, dass wir vor dem Binden noch prüfen können, ob die Funktionsbibliothek an Ort und Stelle ist.

Falls nicht, liefern Sie dem Benutzer eine aussagekräftige Meldung und bitten ihn, die Bibliotheksdatenbank an die gewünschte Stelle zu kopieren.

Entwickler oder Benutzer?

Grundsätzlich sollten Sie jedoch überlegen, ob Sie die vorgestellten Techniken nur für den Zeitraum der Entwicklung nutzen oder ob auch der Benutzer die Bibliotheken erhalten soll. Sie als Entwickler haben (hoffentlich) einen genauen Überblick darüber, wo eine Datenbankanwendung auf Bibliotheken zugreift, und können gegebenenfalls schnell mal einen Pfad anpassen.

Wenn Sie in den Anwendungen, die Sie an Benutzer weitergeben, ebenfalls mit Funktionsbibliotheken arbeiten möchten, könnte der Betrieb natürlich durch fehlende Bibliotheksdateien gestört werden.

Wenn zur Weitergabe vorgesehene Datenbankdateien hingegen alle notwendigen Funktionen im eigenen VBA-Projekt enthalten, entfällt diese Gefahr. Dafür ist bei Aktualisierungen in den Bibliotheksfunktionen gleich das ganze Frontend auszutauschen.

In diesem Beitrag erläutern wir, wie Sie das Einbinden externer Funktionen per Late Binding als Entwickler nutzen können.

Funktionsbibliothek erstellen

Die Funktionsbibliothek muss eine wichtige Voraussetzung erfüllen: Sie muss als Add-In gekennzeichnet werden.

Das ist allerdings im Handumdrehen erledigt - Sie passen dazu lediglich die Dateiendung an:

  • aus .mdb wird .mda und
  • aus .accdb wird .accda.

Sprich: Sie ersetzen einfach nur das b durch das a.

Und, was noch besser ist - im Hinblick auf die eventuelle Weitergabe einer solchen Code-Bibliothek: Sie können auch eine als .mde oder .accde erstellte Datenbankdatei in eine .mda oder .accda-Bibliothek umwandeln.

Begriffsklärung

Im Folgenden sollen die aufrufende Anwendung Host-Anwendung und die Anwendung mit den aufgerufenen Funktionen Add-In-Anwendung heißen.

Einfache Funktion aufrufen

Beginnen wir mit dem ersten Beispiel. Dabei soll die Host-Anwendung eine einfache Funktion in der Add-In-Anwendung aufrufen.

Erstellen Sie also eine Add-In-Anwendung, die sich lediglich durch den Buchstaben a in der Dateiendung als solche zu erkennen gibt. Die sonst bei Add-Ins üblichen Maßnahmen brauchen Sie nicht zu treffen.

Legen Sie dann ein Standardmodul beliebigen Namens in der Add-In-Datenbank an und fügen Sie dort die folgende Funktion hinzu:

Public Function Meldungsfenster()

    MsgBox "Einfaches Meldungsfenster", vbOKOnly, "Add-In"

End Function

Der Test der Funktion zeigt das Meldungsfenster an. Nun schließen Sie die Add-In-Anwendung und erstellen beziehungsweise öffnen die Host-Anwendung.

Damit wir direkt von der Benutzeroberfläche aus arbeiten, legen Sie ein neues Formular in der Host-Anwendung an und fügen diesem eine Schaltfläche namens cmdMeldungsfenster hinzu.

Legen Sie für diese Schaltfläche die folgende Ereignisprozedur an, die durch das Beim Klicken-Ereignis ausgelöst wird:

Private Sub cmdMeldungsfenster_Click()

    Application.Run CurrentProject.Path & "\Ziel.Meldungsfenster"

End Sub

Lassen Sie uns die einzige Anweisung dieser Prozedur auseinandernehmen: Der Aufruf der Funktion in der Add-In-Datenbank wird also durch die Run-Funktion des Application-Objekts erreicht. Diese erwartet als Parameter das Verzeichnis und den Namen der Add-In-Anwendung sowie den Namen der auszuführenden Funktion.

CurrentProject.Path ermittelt in diesem Beispiel den Pfad der aktuellen Datenbank. Damit das Beispiel funktioniert, muss sich die Add-In-Datenbank also im gleichen Verzeichnis wie die Host-Datenbank befinden.

Öffnen Sie das Formular nun in der Formularansicht und klicken Sie auf die Schaltfläche. Dies sollte das Meldungsfenster aus Abb. 1 hervorrufen.

pic001.png

Abb. 1: Aufruf eines Meldungsfensters aus einer anderen Datenbank

Speicherort der Add-In-Datenbank

Sie können die Add-In-Datenbank natürlich auch an jedem anderen Ort speichern - Sie müssen lediglich sicherstellen, dass diese an dem in der Run-Funktion angegebenen Ort liegt. Auch Folgendes wäre machbar, wenn sich die Add-In-Anwendung direkt im Verzeichnis c:\ befindet:

Application.Run "c:\Ziel.Meldungsfenster"

Hier ist deutlicher zu erkennen, dass Sie nur den Namen der Add-In-Anwendung angeben müssen und nicht die Dateiendung. Stattdessen tragen Sie hinter dem Punkt den Namen der aufzurufenden Funktion ein, hier Meldungsfenster. Damit geht einher, dass Sie nicht gleichzeitig etwa eine Add-In-Anwendung namens Ziel.mda und Ziel.accda einsetzen sollten. Das Dateisystem kann beide Dateien zwar unterscheiden, aber nicht die Run-Funkion.

Wenn Sie die Beispieldatenbanken ausprobieren möchten, speichern Sie Start.mdb und Ziel.mda im gleichen Verzeichnis, da hier die CurrentProject.Path-Methode zum Ermitteln des Dateipfades der Add-In-Anwendung verwendet wird.

Was geschieht?

Bevor wir mit weiteren Beispielen fortfahren, schauen wir uns an, was sich mittlerweile im VBA-Editor getan hat. Diesen aktivieren Sie am schnellsten mit einer der Tastenkombinationen Strg + G oder Alt + F11.

Der VBA-Editor zeigt im Objekt-Explorer nunmehr nicht nur das VBA-Projekt der aktuell geöffneten Host-Anwendung an, sondern zusätzlich das der Add-In-Anwendung (s. Abb. 2). Daran ist zu erkennen, dass Access das VBA-Projekt der verwendeten Add-In-Anwendung quasi eingebunden hat - auch wenn der Verweise-Dialog keinen Verweis auf die Add-In-Anwendung aufweist.

pic002.png

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

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:

Diesen Artikel jetzt als PDF plus Beispieldatenbank herunterladen?

Wenn Sie sich jetzt für den Newsletter anmelden, erhalten Sie in Kürze eine E-Mail mit dem Artikel im PDF-Format plus Beispieldatenbank.

Hier anmelden:

E-Mail:

Anrede:

Vorname:

Nachname:

© 2003-2015 André Minhorst Alle Rechte vorbehalten.