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 2/2012.

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

Liefern Sie Access-Add-Ins mit Backends aus, die sich selbst im Zielverzeichnis entpacken

Techniken

VBA, Access-Add-Ins

Voraussetzungen

Access 2000 und höher

Beispieldateien

AddInMitBackend.mda, AddInBackend.mda

Shortlink

www.access-im-unternehmen.de/827

Add-In-Backend bereitstellen

André Minhorst, Duisburg

Mit Access-Add-Ins lassen sich eine Menge Funktionen für Access nachrüsten. Einige Anwendungen produzieren dabei sogar Daten, die im Add-In gespeichert und später wieder bereitgestellt werden. Eigentlich kein Problem - Sie können von einem Add-In aus sowohl auf die Tabellen der Host-Datenbank zugreifen als auch auf die Tabellen in der Add-In-Datenbank selbst. Aber was ist, wenn Sie eine neue Version des Add-Ins liefern, der Benutzer jedoch die bereits damit erstellten Daten weiter nutzen möchte? Die Lösung ist ein Backend. Die Installation eines Add-Ins plus Backend-Datenbank ist jedoch komplizierter als ohne. Wie dies einfach gelingt, zeigt dieser Beitrag.

Access-Add-Ins lassen sich vergleichbar einfach installieren: Sie bringen die .mda- oder .accda-Datei zunächst irgendwo auf der lokalen Festplatte unter. Dann öffnen Sie Access, starten den Add-In-Manager (unter Access 2003 und älter mit dem Menübefehl Extras|Add-Ins|Add-In-Manager oder unter Access 2007 und jünger mit dem Ribbon-Eintrag Datenbank-Tools|Add-Ins|Add-In-Manager) und wählen dort den Befehl Neues hinzufügen (kann je nach Version variieren) aus. Im folgenden Dialog wählen Sie die .mda- oder .accda-Datei aus und sorgen so dafür, dass Access diese Datei in das Add-In-Verzeichnis des Systems speichert und einige Einträge in der Registry anlegt, die Access beim Start Informationen über das neue Add-In liefern.

Nun tritt der bereits in der Einleitung erwähnte Fall ein, dass ein Add-In nicht nur aus der eigentlichen Add-In-Datenbank besteht, sondern zusätzlich noch aus einem Backend. Dieses können Sie zwar problemlos etwa in einer .zip-Bibliothek mitliefern, aber wie gelangt die Backend-Datei in das Add-In-Verzeichnis, damit das Add-In-Frontend dieses schnell und zuverlässig etwa per Referenz über den aktuellen Datenbankordner (CurrentProject.Path) finden kann? Da gibt es mehrere Möglichkeiten:

  • Sie teilen dem Benutzer gleich zu Beginn mit, dass er Frontend und Backend direkt in das Add-In-Verzeichnis von Access kopiert und die dortige Version des Frontends mit dem Add-In-Manager installiert. Nachteil: Je nach Betriebssystem-Version und Benutzer variiert der Pfad zum Add-In-Verzeichnis und der Benutzer muss erst suchen.
  • Sie lassen den Benutzer die beiden Dateien an beliebiger Stelle speichern, installieren das Add-In mit dem Add-In-Manager und fordern den Benutzer beim ersten Start des Add-Ins unter Angabe des Add-In-Verzeichnisses (das sich ja beim Start des Add-Ins mit Codeproject.Path ermitteln lässt) auf, die Backend-Datenbank ins Add-In-Verzeichnis zu kopieren. Ist vielleicht etwas benutzerfreundlicher als die erste Variante, aber nicht optimal.
  • Sie lassen den Add-In-Manager komplett aus dem Spiel und erstellen mit einem Setup-Tool Ihrer Wahl ein einfaches Setup, dass beide Dateien in das Add-In-Verzeichnis kopiert und die benötigten Registry-Einträge vornimmt. Auch hier muss man allerdings erst das Add-In-Verzeichnis programmatisch ermitteln beziehungsweise durch den Benutzer auswählen lassen.
  • Letzte Variante, die in diesem Beitrag vorgestellt wird: Sie geben einfach nur eine Add-In-Datenbank weiter und speichern in einer Tabelle dieser Datenbank die Backend-Datei. Das Add-In kann dann ohne Kenntnis des Add-In-Verzeichnisses und weiteres Zutun des Benutzers über den Add-In-Manager installiert werden. Beim Starten prüft das Add-In dann, ob die Backend-Datenbank bereits im gleichen Verzeichnis, also im Add-In-Verzeichnis, liegt. Ist dies nicht der Fall, wird das Backend aus der Tabelle in das Add-In-Verzeichnis kopiert. Danach werden die Tabellen verknüpft und das Add-In kann seine Arbeit aufnehmen.

Speichern eines Backends in einer Add-In-Datenbank

Das Backend soll in einem OLE-Feld einer Tabelle der Add-In-Datenbank gespeichert werden. Dazu legen Sie zunächst eine Tabelle an, die nur ein Primärschlüsselfeld und ein Feld namens Backend mit dem Datentyp OLE-Objekt enthält (s. Abb. 1).

pic001.png

Abb. 1: Tabelle zum Speichern des Backends

Nun benötigen Sie zunächst eine Funktion, die eine beliebige Backend-Datenbank in das OLE-Feld der Tabelle tblBackend schreibt. Diese Funktion finden Sie in Listing 1. Die Funktion erwartet als einzigen Parameter den Namen der Backend-Datenbank. Der Aufruf dieser Prozedur könnte also beispielsweise wie folgt aussehen:

Public Sub BackendSpeichern()

    If SaveBackendToOLEField(CurrentProject.Path & "\Addin_BE.mda") = True Then

        MsgBox "Backend erfolgreich gespeichert."

    Else

        MsgBox "Backend wurde nicht hinzugefügt."

    End If

End Sub

 

Listing 1: Einfügen der Backend-Datenbank in das OLE-Feld der Tabelle tblBackend

Public Function SaveBackendToOLEField(strFilename As String) As Long

    Dim db As DAO.Database

    Dim rst As DAO.Recordset

    Dim lngFileID As Long

    Dim Buffer() As Byte

    Dim lngFileLen As Long

    Dim strSQL As String

    On Error GoTo SaveBackendToOLEField_Err

    Set db = CurrentDb

    db.Execute "DELETE FROM tblBackend", dbFailOnError

    strSQL = "SELECT Backend FROM tblBackend"

    Set rst = db.OpenRecordset(strSQL, dbOpenDynaset)

    If Dir(strFilename) = "" Then

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:

© 2003-2015 André Minhorst Alle Rechte vorbehalten.