Add-In-Backend bereitstellen

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
        MsgBox "Die Datei ''" & strFilename & "'' existiert nicht."
        Exit Function
    End If
    rst.AddNew
    lngFileID = FreeFile
    Open strFilename For Binary Access Read Lock Read Write As lngFileID
    lngFileLen = LOF(lngFileID)
    ReDim Buffer(lngFileLen)
    rst!Backend = Null
    Get lngFileID, , Buffer
    rst!Backend.AppendChunk Buffer
    rst.Update
    SaveBackendToOLEField = True
    SaveBackendToOLEField_Exit:
    On Error Resume Next
    Close lngFileID
    rst.Close
    Set rst = Nothing
    Set db = Nothing
    Exit Function
SaveBackendToOLEField_Err:
    SaveBackendToOLEField = Err.Number
    Resume SaveBackendToOLEField_Exit
End Function

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

Workplace

Jahresabonnement TestzugangOder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar