Unsere Webseiten benötigen JavaScript. Dies scheint in Ihrem Browser jedoch deaktiviert zu sein.

News & Tipps zu Microsoft Access

Lesen Sie hier einige der besten Beiträge aus SmartTools Access Weekly sowie ausgewählte Inhalte anderer E-Mail-Newsletter von SmartTools Publishing rund um Microsoft Access.

Beitrag aus SmartTools Access Weekly

Sicherungskopie der aktuellen Datenbank per VBA anlegen

Access 365 2024 2021 2019 2016 2013 2010

FRAGE Ich möchte die Datensicherung meiner Access-Datenbanken automatisieren, damit die Anwender diese wichtige Routineaufgabe nicht manuell ausführen müssen. Kennen Sie eine Möglichkeit, per VBA-Prozedur eine Sicherungskopie der aktuellen Datenbank in ihrem momentanen Verzeichnis zu speichern? Meine Versuche mit "FileCopy" sind gescheitert, es wird ein Laufzeitfehler "Zugriff verweigert" angezeigt.

Diverse Anfragen

ANTWORT Wenn eine Datenbank geöffnet ist, wird diese durch Access gesperrt, so dass Zugriffe darauf zum Beispiel mit "FileCopy" immer mit einem "Zugriff verweigert" enden. Wenn Sie jedoch Word installiert haben, können Sie dessen spezielles Objekt "WordBasic" für diese Aufgabe nutzen. "WordBasic" stellt eine Methode "CopyFileA" bereit, die sich nicht um Zugriffsrechte kümmert. Dabei ist allerdings zu beachten, dass dabei die Datenbank in einem Zustand gespeichert werden könnte, die ein späteres Öffnen verhindert. Es sollte sichergestellt sein, dass keine Objekte geöffnet und alle ausstehenden Änderungen abgeschlossen bzw. gespeichert sind. Dann können Sie zum Anlegen einer Sicherungskopie folgende Prozedur nutzen:

Sub CopyDB()
  Dim strPath As String, strFName As String
  Dim strExt As String
  Dim strSource As String, strDest As String
  Dim tmp As Variant
  Dim objWord As Object

  strPath = CurrentProject.Path
  If Right$(strPath, 1) <> "\" Then
    strPath = strPath & "\"
  End If
  strSource = CurrentProject.FullName
  tmp = Split(strSource, "\")
  strFName = tmp(UBound(tmp))
  tmp = Split(strFName, ".")
  strExt = tmp(UBound(tmp))
  ReDim Preserve tmp(UBound(tmp) - 1)
  strFName = Join(tmp)
  strDest = strPath & _
            Format$(Now, "yyyy-mm-dd") & " " & _
            strFName & "." & strExt
  Set objWord = CreateObject("Word.Application")
  objWord.WordBasic.CopyFileA strSource, strDest
  objWord.Quit False
  Set objWord = Nothing

End Sub

Die Prozedur ermittelt zunächst Pfad und Dateinamen der aktuellen Datenbank und setzt daraus einen neuen Pfad-/Dateinamen im Format "<PfadDerDatenbank>\JJJJ-MM-DD <Dateiname>" zusammen. Dann wird ein Word-Objekt in "objWord" instanziiert und über die Objektvariable die Methode "WordBasic.CopyFileA" mit dem Quell- und Zielpfad der zu kopierenden Datei aufgerufen. Die dann folgenden Anweisungen beenden Word wieder und setzen die Verbindung zurück.