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.