Tipp 1.22 - Verweise überprüfen

Welche Möglichkeiten habe ich, um fehlerhafte Verweise zu ermitteln?

Defekte Verweise führen in der Regel zu Problemen beim Ausführen der Datenbanken unter Microsoft Access. Um den Benutzer nicht damit zu überraschen, ist es sinnvoll, gleich beim Start der Datenbank zu prüfen, ob alles in Ordnung ist.

Seit Microsoft Access 2002 (Access XP oder höher) steht Ihnen hierzu eine passende Eigenschaft zur Verfügung, die angibt, ob es fehlerhafte Verweise gibt. Die Eigenschaft heißt BrokenReference und gibt False zurück, wenn alles in Ordnung ist. Beim Starten Ihrer Anwendung brauchen Sie diese also nur auszuwerten.

Beispielfunktion:

Beispiel:

' Check broken Reference
Public Function CheckReference(psMsg As String) As Boolean
 
  '// =====================================================
  '// Methode   | Überprüft die Verweise in der Datenbank
  '// -----------------------------------------------------
  '// Parameter | psMsg - Leerstring für die Ausgabe der
  '                       fehlerhaften Verweise
  '// -----------------------------------------------------
  '// Rückgabe  | Boolean = True=OK, False=Verweise defekt
  '// -----------------------------------------------------
  '// Erstellt  | Manuela Kulpa
  '//           | EDV Innovation & Consulting - Dormagen
  '// -----------------------------------------------------
  '// Beispielaufruf:
  '// siehe Beispielaufruf
  '// =====================================================
 
  Dim ref As Reference
  Dim sMsg As String
  Dim fCheck As Boolean
 
  On Error GoTo CheckReference_Err
 
  fCheck = True
 
  ' Überprüfung, ob fehlerhafte Verweise
  ' vorhanden sind
  If Application.BrokenReference = True Then
    fCheck = False
    ' Wenn ja, Schleife über alle Verweise,
    ' um die fehlerhaften zu ermitteln
    For Each ref In Application.References
      ' Wenn der aktuelle Verweis defekt ist,
      If ref.IsBroken = True Then
        ' dann Verweisname ermitteln und in der
        ' Msg-Variable zwischenspeichern
        sMsg = sMsg & "    " & ref.Name & vbCrLf
      End If
    Next ref
  End If
 
  ' Übergabe der Überprüfung
  CheckReference = fCheck
 
CheckReference_Exit:
  On Error GoTo 0
  Exit Function
 
CheckReference_Err:
  MsgBox "Fehler " & Err.Number & ": " & _
         Err.Description, vbCritical, _
         "modDiv.CheckReference"
  Resume CheckReference_Exit
 
End Function
Anwendungsbeispiel:
Public Sub TestReference()
 
  Dim sMsg As String
 
  If CheckReference(sMsg) = False Then
    MsgBox "Folgende Verweise sind fehlerhaft:" & vbCrLf & _
           Left(sMsg, Len(sMsg) - 2), vbInformation, _
           "Hinweis"
  End If
 
End Sub

Bis Access 2000 steht Ihnen die BrokenReference Eigenschaft leider nicht zur Verfügung. Wenn wir aber unsere oben aufgeführte Funktion ein bissel abwandeln, können Sie diese natürlich auch unter Microsoft Access 97 oder 2000 verwenden:

Beispielfunktion für Access 97 und 2000:

Beispiel:

' Check broken Reference for Access 97 and 2000
Public Function CheckReference2(psMsg As String) As Boolean
 
  '// =====================================================
  '// Methode   | Überprüft die Verweise in der Datenbank
  '// -----------------------------------------------------
  '// Parameter | psMsg - Leerstring für die Ausgabe der
  '                       fehlerhaften Verweise
  '// -----------------------------------------------------
  '// Rückgabe  | Boolean = True=OK, False=Verweise defekt
  '// -----------------------------------------------------
  '// Erstellt  | Manuela Kulpa
  '//           | EDV Innovation & Consulting - Dormagen
  '// -----------------------------------------------------
  '// Beispielaufruf:
  '// siehe Beispielaufruf
  '// =====================================================
 
  Dim ref As Reference
  Dim sMsg As String
  Dim fCheck As Boolean
 
  On Error GoTo CheckReference2_Err
 
  fCheck = True
 
  ' Schleife über alle Verweise,
  ' um die fehlerhaften zu ermitteln
  For Each ref In Application.References
    ' Wenn der aktuelle Verweis defekt ist,
    If ref.IsBroken = True Then
      fCheck = False
      ' dann Verweisname ermitteln und in der
      ' Msg-Variable zwischenspeichern
      sMsg = sMsg & "    " & ref.Name & vbCrLf
    End If
  Next ref
 
  ' Übergabe der Überprüfung
  CheckReference2 = fCheck
 
CheckReference2_Exit:
  On Error GoTo 0
  Exit Function
 
CheckReference2_Err:
  MsgBox "Fehler " & Err.Number & ": " & _
         Err.Description, vbCritical, _
         "modDiv.CheckReference2"
  Resume CheckReference2_Exit
 
End Function

Weiterführende Informationen erhalten Sie auch bei Microsoft direkt: Externer Link ACC97: Fehler: "Funktion steht in Ausdrücken nicht zur Verfügung"