Warum noch ein Access-Buch?
Für wen ist das Buch?
Jetzt bestellen
+ direkter Download des eBooks!
Nur EUR 59,95!
Fehler gefunden?
Bitte melden!
Wünsche an das Buch?
Her damit!
Was denken die Leser über dieses Buch?
Lesen Sie aktuelle Rezensionen!
Kapitel des noch nicht veröffentlichten Buchs zum Downloaden, Probelesen und Kommentieren
Beispieldatenbanken
Zusätzliches Material

Das Buch im HTML-Format

Für unbestimmte Zeit bieten Addison-Wesley und André Minhorst den kompletten Inhalt des Buchs als Download an. Schauen Sie rein und informieren Sie sich über den Inhalt! Und wenn Ihnen das Buch nützlich erscheint und Sie glauben, dass Sie etwas gelernt haben oder durch das Gelesene sogar etwas Zeit und somit Geld bei Ihrer Arbeit einsparen konnten, können Sie sich ja beim Autor und beim Verlag revanchieren - beispielsweise durch den Kauf dieses Buchs.

Am schönsten wäre es natürlich, wenn Sie das Buch direkt hier bestellen - Sie erhalten das Buch dann direkt vom Verlag, und der Autor und Verlag haben dann noch mehr davon, als wenn Sie es anderswo kaufen.

Danke für Ihr Interesse!

19.5.4 Tabellen als Verknüpfung einbinden

19.5.5 Erneutes Einbinden der Tabellen nach Umbenennen oder Verschieben des Backends

Solange Sie das Backend immer an der gleichen Stelle aufbewahren, ist das alles auch kein Problem: Der Pfad des Backends ist absolut in der Datenbank gespeichert. Interessant wird es, wenn Sie die Datenbank weitergeben. Wenn beim Endanwender nicht gerade genau die gleichen Rechner- und Verzeichnisnamen wie in der Entwicklungsumgebung vorliegen, sind Änderungen an den Pfaden der eingebundenen Tabellen notwendig. Am besten versorgen Sie die Datenbank mit einer Funktion, die selbst überprüft, ob sich das Backend an der geplanten Stelle befindet, und die ansonsten einen Dateidialog anzeigt, mit dem der Benutzer den neuen Standort des Backends eingeben kann.

Abbildung 19.4: Datenbankfrontend mit verknüpften Tabellen aus dem Backend

Im Internet kursieren einige Lösungen, die zwar dynamisch alle Verknüpfungen aktualisieren, aber keine Absicherung dagegen bieten, dass der Benutzer einmal die falsche .accdb-Datei als Ziel der Verknüpfungen auswählt. Infolgedessen werden dort zwar die bestehenden Verknüpfungen gelöscht, aber mangels passender Tabellen im Backend nicht wieder hergestellt. Beim nächsten Versuch fehlt dann zumindest eine Verknüpfung, die bis zum Bemerken des Fehlers gelöscht wurde; das komplette Datenmodell kann dann ohne manuellen Eingriff nicht wieder hergestellt werden.

Die folgende Lösung für das automatische Wiedereinbinden von Backend-Tabellen erfordert zwar einmalig die Angabe aller zu verknüpfenden Tabellen, ist aber unempfindlicher gegenüber dem Einbinden falscher Backends.

Die Routine erwartet zwei Parameter: Den kompletten Pfad inklusive Dateiname der Backend-Datenbank sowie ein Array mit den einzubindenden Tabellen.

Public Function BackendEinbinden(strBackendPfad As String, _
    strTabellenliste() As String) As String
    
    Dim lngAnswer As Long
    Dim db As Database
    Dim tdf As TableDef
    Dim strBackendName As String
    Dim strBackendpath As String
    Dim i As Integer
    Dim strFehler As String
    Dim boolBackendVorhanden As Boolean
    
    strBackendName = Mid(strBackendPfad, InStrRev(strBackendPfad, "\") + 1)

CheckPath:
    'Prüfen, ob angegebenes Backend vorhanden
    On Error Resume Next
    boolBackendVorhanden = Not Dir(strBackendPfad) = ""
    If Not boolBackendVorhanden Or Err.Number <> 0 Then
        On Error GoTo 0
        'Falls nicht gefunden:
        'Fragen, ob ein anderes Backend ausgewählt werden soll
        If MsgBox("Die Backend-Datenbankdatei kann nicht im Pfad '" _
            & strBackendPfad & "' gefunden werden. Klicken Sie auf " _
            & "'Ja', um die Datei auszuwählen und auf 'Nein', um die " _
            & "Anwendung zu beenden.", vbYesNo) = vbYes Then
        
            strBackendPfad = OpenFileName(CurrentProject.Path, _
                "Backend auswählen", _
                "Access-Datenbank (*.accdb)|Alle Dateien(*.*)")
                
            'Wenn keine Datei ausgewählt oder Dialog abgebrochen:
            'Anwendung beenden.
            If strBackendPfad = "" Then
                MsgBox "Sie haben die Aktion abgebrochen. " _
                    & "Die Anwendung wird geschlossen."
                DoCmd.Quit
            End If
            
            Set db = CurrentDb
            'Prüfen, ob eine vorhandene Datei ausgewählt wurde
            'und gegebenenfalls Auswahl neu starten
            GoTo CheckPath
        Else
            DoCmd.Quit
        End If
        
    Else
    
        On Error GoTo 0
        Set db = CurrentDb
        'Alle Tabellen durchlaufen...
        For Each tdf In db.TableDefs
        
            '... und mit der übergebenen Tabellenliste abgleichen
            For i = LBound(strTabellenliste()) To _
                UBound(strTabellenliste())
                'Wo Übereinstimmungen sind:
                If tdf.Name = strTabellenliste(i) Then
                    
                    'Versuchen, die Tabelle neu zu verknüpfen
                    'und gegebenenfalls Fehlerliste aktualisieren
                    tdf.Connect = ";database=" & strBackendPfad
                    On Error Resume Next
                    tdf.RefreshLink
                    If Err.Number > 0 Then
                         strFehler = strFehler & "- Die Tabelle '" _
                             & strTabellenliste(i) _
                             & "' konnte nicht eingebunden werden." _
                             & vbCrLf
                    End If
                    On Error GoTo 0
                End If
            Next i
        Next tdf
    End If
    
    'Falls es Fehler gab: Meldung ausgeben
    If Len(strFehler) > 0 Then
        MsgBox "Es sind Fehler beim Einbinden der " _
            & "Backend-Datenbank aufgetreten: " & vbCrLf & strFehler, _
            vbOKOnly + vbExclamation, "Fehler beim Einbinden"
    End If

End Function

Listing 19.3: Routine zum Wiedereinbinden von Tabellen aus einer Backend-Datenbank

Die Routine wird beispielsweise wie in folgender Prozedur aufgerufen. Die Prozedur erstellt ein Array mit der gewünschten Anzahl Felder und trägt die einzubindenden Tabellen ein. Dann ruft die Prozedur die Routine BackendEinbinden auf. Der Vorteil bei der Übergabe der einzubindenden Tabellen per Parameter ist, dass Sie auch mit Anwendungen arbeiten können, die ihre Tabellen aus mehr als einem Backend beziehen. In diesem Fall rufen Sie die Routine BackendEinbinden einfach mehrmals mit den unterschiedlichen Parametern auf. Die Funktion VerknuepfungenPruefen testet zuvor, ob die Tabellen überhaupt neu eingebunden werden müssen. Den Code dieser Routine finden Sie im nächsten Abschnitt.

Public Function BackendEinbindenBeispielaufruf()

    Dim strTabellen(8) As String

    strTabellen(1) = "Artikel"
    strTabellen(2) = "Bestelldetails"
    strTabellen(3) = "Bestellungen"
    strTabellen(4) = "Kategorien"
    strTabellen(5) = "Kunden"
    strTabellen(6) = "Lieferanten"
    strTabellen(7) = "Personal"
    strTabellen(8) = "Versandfirmen"
    If VerknuepfungenPruefen(strTabellen()) = False Then
        BackendEinbinden CurrentProject.Path _
            & "\Nordwind_Backend.accdb", strTabellen
    End If
End Function

Listing 19.4: Beispielaufruf der Funktion zum Einbinden von Tabellen des Backends

Nächster Abschnitt:

19.5.6 Zeitpunkt zum Wiedereinbinden von Tabellen

© 2006-2008 André Minhorst Alle Rechte vorbehalten.