Warum das überhaupt ein Thema ist

Access merkt sich den Pfad zur Backend-Datei.
Wenn Du die verschiebst oder der Laufwerksbuchstabe sich ändert,
finden Deine Tabellen nichts mehr.
Dann geht das Geklicke los.

Ich mach das anders. Ich prüfe beim Start, ob die Verknüpfungen noch gültig sind.
Wenn nicht, repariere ich sie automatisch.

Der Standardfall: Backend auf Netzlaufwerk

Du hast die Tabellen per Assistent verknüpft.
Access speichert dann etwas wie:

;DATABASE=Z:\Daten\backend.accdb

Das ist instabil. Ich arbeite lieber mit UNC-Pfaden:

;DATABASE=\\Server01\AccessDB\backend.accdb

Beim Start: Verknüpfung prüfen und aktualisieren

Ich prüfe beim Öffnen, ob die erste verknüpfte Tabelle erreichbar ist.
Wenn nicht, starte ich ein automatisches Re-Linking.

Schrittweise erklärt

  1. Backend-Dateipfad zentral definieren
  2. Prüfen, ob der Pfad existiert
  3. Bestehende Tabellenverknüpfung löschen
  4. Neu verknüpfen mit aktuellem Pfad

Beispielcode: Automatisches Refresh beim Start

Sub CheckUndRefreshTabellen()

  Dim db As DAO.Database
  Dim tdf As DAO.TableDef
  Dim strBackendPfad As String
  Dim strConnect As String
  
  strBackendPfad = "\\Server01\AccessDB\backend.accdb"
  strConnect = ";DATABASE=" & strBackendPfad
  
  Set db = CurrentDb

  On Error GoTo Fehler

  ' Test: Gibt es die Datei?
  If Dir(strBackendPfad) = "" Then
    MsgBox "Backend nicht gefunden: " & strBackendPfad, vbCritical
    Exit Sub
  End If

  ' Tabelle prüfen
  For Each tdf In db.TableDefs
    If Len(tdf.Connect) > 0 And InStr(tdf.Connect, "DATABASE=") > 0 Then
      tdf.Connect = strConnect
      tdf.RefreshLink
    End If
  Next

  MsgBox "Tabellenverknüpfungen aktualisiert.", vbInformation
  Exit Sub

Fehler:
  MsgBox "Fehler beim Aktualisieren: " & Err.Description, vbExclamation

End Sub

Tipp: Beim Öffnen der Anwendung automatisch starten

Im Startformular oder AutoExec-Makro aufrufen:

=CheckUndRefreshTabellen()

UNC statt Laufwerk: Bessere Stabilität

Gemappte Laufwerke wie Z:\ sind benutzerabhängig.
UNC ist für alle gleich – und robuster.
Ich verlinke alle Tabellen über UNC. Immer.

Unterschiedliche Backend-Pfade pro Standort?

Wenn Du mehrere Standorte hast, kannst Du den Pfad per Konfig-Tabelle speichern.
Oder per INI-Datei. Oder aus der Registry lesen.
Hauptsache: Nicht fest im Code verdrahten.

Beispiel: Pfad aus Tabelle lesen

Function HoleBackendPfad() As String
  HoleBackendPfad = DLookup("Pfad", "tblBackendPfad", "ID=1")
End Function

Dann:

strBackendPfad = HoleBackendPfad()

Tabellenverknüpfung komplett neu erstellen

Wenn Du auf Nummer sicher gehen willst, kannst Du alle Tabellen löschen und neu einbinden.

Beispiel: Komplettes Re-Linking

Sub NeuVerknuepfen()

  Dim db As DAO.Database
  Dim tdf As DAO.TableDef
  Dim strBackend As String
  Dim tabelle As Variant
  
  strBackend = "\\Server01\AccessDB\backend.accdb"
  
  Set db = CurrentDb

  ' Alte Verknüpfungen löschen
  For Each tdf In db.TableDefs
    If Len(tdf.Connect) > 0 And InStr(tdf.Connect, "DATABASE=") > 0 Then
      db.TableDefs.Delete tdf.Name
    End If
  Next

  ' Neu verknüpfen
  For Each tabelle In Array("Kunden", "Aufträge", "Produkte")
    Set tdf = db.CreateTableDef(tabelle)
    tdf.SourceTableName = tabelle
    tdf.Connect = ";DATABASE=" & strBackend
    db.TableDefs.Append tdf
  Next

  MsgBox "Tabellen neu verknüpft."

End Sub

Mein Tipp zum Schluss

Wer verknüpfte Tabellen automatisch pflegt, muss nicht im Montagmorgen-Chaos debuggen.
Access kann das. Du musst es ihm nur beibringen.

Categories:

Tags:

No responses yet

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert