Das Problem | |
Einerseits enthalten Access-Datenbanken oft wichtige Informationen, andererseits gibt es in Access keinen vernünftigen Mechanismus, um Datenbanken zu sichern. Das folgende Beispielprogramm (Skript) ist eine VBS-Datei (=Visual Basic Script) läuft mit dem Windows Scripting Host und tut folgendes:
Die Benennung der Sicherungsdateien folgt einer UNIX-Idee, die auch unter Windows sehr
zweckmäßig ist. Man nehme z.B. eine Tabellen-Datei und eine Grafik-Datei, die beide
Backups mit der Endung *.BAK erstellen. Wenn beide Dateien den gleichen Dateinamen haben, z.B.
'Umsätze.*' dann überschreiben sich die Sicherungskopien bei jedem Speichern gegenseitig.
Außerdem ist an einer Endung .BAK nicht zu erkennen, um welchen Dateityp es sich
ursprünglich handelt. | |
Voraussetzungen | |
| |
Anwendungsbereich und bekannte Probleme | |
| |
Das Script AccessKomprimieren.VBS |
' Initialisierung
Set ShellWSH = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
AccessPfad = """" & CreateObject("Access.Application").SysCmd(9) & "MSACCESS.EXE"" """
PackProgramm = """C:\Tools\PowerArchiver\POWERARC.EXE"" -a -c4 """
'### Anfang: Liste der zu komprimierenden Datenbanken
Komprimieren "C:\Eigene Dateien\Verliehen.mdb"
Komprimieren "C:\Eigene Dateien\Schallplatten.mdb"
' ... (Nächste Datenbank)
' ... (Noch 'ne Datenbank)
'### Ende: Liste der zu komprimierenden Datenbanken
' Unterprogramm
Private Sub Komprimieren(DateiName)
BackupDatei = DateiName + ".zip"
If Not FSO.FileExists(DateiName) Then Exit Sub
With FSO.GetFile(DateiName)
If .Attributes And 32 Then
ShellWSH.Run AccessPfad + DateiName + """ /compact", 0, True
If FSO.FileExists(BackupDatei) Then FSO.CopyFile BackupDatei, BackupDatei & ".bak"
ShellWSH.Run PackProgramm + BackupDatei + """ """ + DateiName + """", 0, True
.Attributes = .Attributes And Not 32
End If
End With
End Sub
Erstellen des Scripts |
Damit das Script funktioniert, sind folgende Maßnahmen zu treffen:
Das VBS läuft beim ersten Aufruf sehr langsam, weil jede MDB-Datei komprimiert und gepackt werden
muß. Da über das Archiv-Attribut geprüft wird, ob die Datei verändert wurde, ist der Ablauf aber
ab dem zweiten Mal erheblich schneller, da nur noch die geänderten Dateien geprüft werden. |
Packprogramm ändern |
Um die Auswahl der Packprogramme zu erweitern, habe ich hier noch ein paar Anpassungsvorschläge. Alle hier angegebenen Pfade der Packprogramme sind die Standard-Installationspfade und müssen je nach System noch angepasst werden.
Das Script enthält zu Beginn die Zeile
Diese Zeile ruft den PowerArchiver auf und stellt die maximale Kompression ein.
Die folgende Änderung steigert die Packrate von PowerArchiver extrem - leider auch die Laufzeit:
Dieser Archiv-Typ (CABinet-File) wird von allen drei Packprogrammen problemlos und ohne Nachfragen gelesen, die Angst vor proprietär-exotischen Archiv-Formaten wäre also unberechtigt. Für WinZip ist nur die Zeile für die Definition des Packprogramms anzupassen:
Die Kompressionsrate wird mit -ex auf maximale Kompression eingestellt.
Bei WinRAR sorgt die folgende Zeile für maximale Kompression plus Multimedia-Kompresssion (günstig, wenn in Access OLE-Objekte gespeichert werden) und gleichzeitig für viele Wiederherstellungsinformationen (Wiederherstellung ist mit -rr16 angelegt und kann bis auf -rr4096 erhöht werden)
Im Falle von WinRAR muss auch die Zeile
in geändert werden.
|