{"id":55000213,"date":"2004-04-01T00:00:00","date_gmt":"2020-05-06T15:17:39","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=213"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Datenbanken_komprimieren_speichern_und_sichern","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Datenbanken_komprimieren_speichern_und_sichern\/","title":{"rendered":"Datenbanken komprimieren, speichern und sichern"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg05.met.vgwort.de\/na\/01dac5af129a4f928db7960f5da06643\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Manfred Hoffbauer, D&uuml;sseldorf, und Andr&eacute; Minhorst, Duisburg<\/b><\/p>\n<p><b>Access speichert alle Objekte einer Datenbank in einer einzigen Datei mit der Erweiterung .mdb. Wenn Sie einmal die Zeit f&uuml;r das Erstellen der Datenbankobjekte und die Zeit f&uuml;r die Datenbearbeitung zusammenrechnen, dann erhalten Sie einen Eindruck von dem Wert der Datenbankdatei. Der einzige wirksame Schutz gegen den totalen Verlust der .mdb-Datei ist die regelm&auml;&szlig;ige Datensicherung auf einem externen Medium. Dabei und bei einigen anderen Aufgaben hilft Ihnen das Tool, das wir Ihnen in diesem Beitrag vorstellen.<\/b><\/p>\n<p>Um es vorwegzunehmen: Die Sicherung einer Datenbank ist immer l&auml;stig. Um hohe Sicherheit zu erlangen, m&uuml;ssen Sie die .mdb-Datei auf einem externen Medium (zum Beispiel Band, CD, DVD, FTP-Verzeichnis, Wechselplatte) sichern und dieses auch noch an einem sicheren Ort aufbewahren.<\/p>\n<p>Die Datenbank sollte sich selbst bei einem Totalverlust des Server-PC beispielsweise durch Diebstahl oder Brand wieder rekonstruieren lassen.<\/p>\n<p>Eine weniger sichere, aber weitaus einfacher zu realisierende Form der Datensicherung ist das regelm&auml;&szlig;ige Kopieren der Dateibankdatei. Hierbei tritt immer wieder das Problem auf, dass die .mdb-Dateien unter Umst&auml;nden zahlreich und an verschiedensten Orten auf der Festplatte verstreut sind. An dieser Stelle hilft Ihnen das im Folgenden beschriebene Access-Programm weiter, das das Kopieren der Datenbanken f&uuml;r Sie &uuml;bernimmt. Weiter unten in diesem Beitrag reichern wir das Basisprogramm um eine Funktion zum Komprimieren der Datenbanken an.<\/p>\n<p>Zum Schluss erfahren Sie noch, wie Sie die Sicherungsvorg&auml;nge mit dem Windows-Dienst Geplante Tasks zeitlich planen k&ouml;nnen. Ein Verlegen der Sicherung auf die Nacht verringert die Wahrscheinlichkeit, dass Datenbanken nicht zuverl&auml;ssig gesichert werden k&ouml;nnen, weil diese noch durch Benutzer gesperrt sind.<\/p>\n<h3>Hinweis<\/h3>\n<p>Access-Datenbanken k&ouml;nnen nur zuverl&auml;ssig gesichert werden, wenn sie zum Zeitpunkt der Sicherung nicht ge&ouml;ffnet sind. Weitere Informationen zu diesem Thema erhalten Sie im Beitrag Datenbanksperre abfragen in der vorliegenden Ausgabe von Access im Unternehmen. <\/p>\n<h2>Tabelle zum Speichern derSicherungsvorg&auml;nge<\/h2>\n<p>Die f&uuml;r die Steuerung der Sicherungsfunktion ben&ouml;tigten Daten werden in der Tabelle tblDatensicherung gespeichert (s. Tab. 1). Anhand des Tabellenentwurfs k&ouml;nnen Sie erkennen, dass das Tool einige Zusatzfunktionen enth&auml;lt:<\/p>\n<li>Sichern von Datenbanken<\/li>\n<li>Komprimieren von Datenbanken<\/li>\n<li>Packen von Datenbanken<\/li>\n<li>Packen aller in einem Verzeichnis und dessen Unterverzeichnissen enthaltenen Datenbanken<\/li>\n<li>Zeitliche Steuerung der Sicherungsvorg&auml;nge<\/li>\n<h3>Hinweis<\/h3>\n<p>Zum Packen verwenden Sie das Programm Arj32.exe. Es dampft .mdb- und andere Dateien gewaltig ein und hilft damit, Festplattenspeicher zu sparen. Sie k&ouml;nnen das Programm von der Seite Fehler! Hyperlink-Referenz ung&uuml;ltig. kostenlos zum Test herunterladen. Die Datei befindet sich im Bereich Download. Zur Installation der Software starten Sie einfach die heruntergeladene Datei. <\/p>\n<h2>Parametertabelle<\/h2>\n<p>Die Tabelle tblParameter besteht aus drei Feldern: ParamterID, Parameter und Wert. Hier speichern Sie unterschiedliche Parameter wie beispielsweise den Pfad zur Datei MSAccess.exe auf dem aktuellen Rechner oder den Pfad zu dem in dieser Anwendung verwendeten Packprogramm Arj.exe.<\/p>\n<p>Die Parameter werden von Hand in diese Tabelle eingetragen; bei Bedarf k&ouml;nnen Sie dazu ein geeignetes Formular anlegen.<\/p>\n<h2>Formular zur Eingabe derSicherungsdaten<\/h2>\n<p>Um die Eingabe der Daten in die Tabelle zu vereinfachen, verwenden Sie ein geeignetes Formular (siehe Bild 1).<\/p>\n<p>In dem Formular k&ouml;nnen Sie beliebig viele Sicherungsvorg&auml;nge definieren, die verschiedene Dateien, Sicherungsarten und Zeitpunkte beinhalten. Durch das Speichern eines Datensatzes wird automatisch eine Aufgabe im Windows-Dienst Geplante Tasks erstellt.<\/p>\n<h3>Hinweis<\/h3>\n<p>Weitere Informationen zum Planen von Aktionen mit Geplante Tasks finden Sie im Beitrag Geplante Tasks mit Access in der vorliegenden Ausgabe von Access im Unternehmen. <\/p>\n<table border=1>\n<tr>\n<td>\n<p><b>Feldname<\/b><\/p>\n<\/td>\n<td>\n<p><b>Bedeutung<\/b><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>DatenbankID<\/p>\n<\/td>\n<td>\n<p>Zahlenfeld. Als Prim&auml;rschl&uuml;ssel und zur Sortierung geeignet.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Quelldatei<\/p>\n<\/td>\n<td>\n<p>Laufwerk, Pfad und Dateiname der Quelldatei.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Zieldatei<\/p>\n<\/td>\n<td>\n<p>Laufwerk, Pfad und Dateiname der Zieldatei.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>IstKomprimieren<\/p>\n<\/td>\n<td>\n<p>Erh&auml;lt den Wert ja, wenn die Datenbank vor der Sicherung komprimiert werden soll.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>IstPacken<\/p>\n<\/td>\n<td>\n<p>Erh&auml;lt den Wert ja, wenn die Sicherung mit ARJ32 gepackt werden soll.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>IstRekursiv<\/p>\n<\/td>\n<td>\n<p>Nur bei IstPacken = JA relevant. Erh&auml;lt den Wert ja, wenn ARJ32 Unterverzeichnisse rekursiv durchsuchen soll.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>IstGestartet<\/p>\n<\/td>\n<td>\n<p>Ja\/Nein-Feld anhand dessen Sie feststellen k&ouml;nnen, ob der Vorgang begonnen wurde.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>IstAbgeschlossen<\/p>\n<\/td>\n<td>\n<p>Ja\/Nein-Feld anhand dessen Sie feststellen k&ouml;nnen, ob der Vorgang abgeschlossen wurde.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Fehlermeldung<\/p>\n<\/td>\n<td>\n<p>Textfeld, das das Ergebnis des Vorgangs beschreibt.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Letzte&auml;nderung<\/p>\n<\/td>\n<td>\n<p>Zeitpunkt der letzten &auml;nderung an diesem Datensatz.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Uhrzeit<\/p>\n<\/td>\n<td>\n<p>Uhrzeit des Backups<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Samstag, Sonntag, &#8230;<\/p>\n<\/td>\n<td>\n<p>Tag\/e der Woche, an dem beziehungsweise denen gesichert werden soll<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>JobID<\/p>\n<\/td>\n<td>\n<p>ID, unter der dieser Sicherungsvorgang in Geplante Tasks gespeichert ist<\/p>\n<\/td>\n<\/tr>\n<\/table>\n<p><b>Tab. 1: Die Felder der Tabelle tblDatensicherung<\/b><\/p>\n<p>Neben dem Festlegen der Eigenschaften eines Sicherungsvorgangs k&ouml;nnen Sie jeden Sicherungsvorgang einzeln starten. Dazu finden Sie am rechten Rand des Formulars f&uuml;r jeden Datensatz eine entsprechende Schaltfl&auml;che. Diese Funktion kann nicht nur zum manuellen Sichern, sondern auch zum Testen der Sicherungsfunktion verwendet werden.<\/p>\n<p><IMG height=\"228\" src=\"..\/fileadmin\/_temp_\/{92237D12-2C2D-4157-B94B-8AC0EDB1790B}\/pic001.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1:  Das Formular zeigt den Inhalt der Tabelle tblDatensicherung und steuert die Datensicherung.<\/span><\/b><\/p>\n<p>Der Start der Datensicherung erfolgt mit der Prozedur Sichere (s. Quellcode 1). Diese wird von zwei Stellen aus aufgerufen:<\/p>\n<li>direkt &uuml;ber eine der Schaltfl&auml;chen zum Starten eines Sicherungsvorgangs<\/li>\n<li>&uuml;ber eine Funktion, die durch das AutoExec-Makro beim Starten der Datenbank durch den Windows-Dienst Geplante Tasks ausgel&ouml;st wird<\/li>\n<p>Die Prozedur Sichere erwartet die DatenbankID eines Sicherungsdatensatzes aus der Tabelle tblDatensicherung.<\/p>\n<p>Die erste Aufgabe der Prozedur Sichere besteht darin, die Felder IstAbgeschlossen und Fehlermeldung zu initialisieren.<\/p>\n<p>Werte von einem vorhergehenden Durchlauf werden dadurch gel&ouml;scht. Das Feld Letzte&auml;nderung wird auf die aktuelle Systemzeit und das Feld IstGestartet auf Ja gesetzt.<\/p>\n<h2>Steuerung<\/h2>\n<p>Die anschlie&szlig;ende If-Abfrage &uuml;bernimmt die grundlegende Steuerung f&uuml;r den aktuellen Datensatz und verzweigt in verschiedene Prozeduren. Der Funktionsaufruf IstDateiVorhanden(rst!Quelldatei) pr&uuml;ft zun&auml;chst, ob die angegebene Quelldatei &uuml;berhaupt existiert. Die dahinter liegende Funktion ermittelt das Vorhandensein mittels Dir-Funktion. Diese liefert sowohl bei einzelnen Dateien (zum Beispiel C:\\Temp\\Test.mdb) als auch bei der Verwendung von g&uuml;ltigen Wildcards (zum Beispiel C:\\Temp\\*.mdb) den Wert True zur&uuml;ck. Falls Laufwerk, Pfad oder Datei nicht existieren, zeigt die Funktion den Wert False an.<\/p>\n<p>Das Programm vermerkt das Fehlen der Quelldatei in dem Feld Fehlermeldung des aktuellen Datensatzes.<\/p>\n<p>Falls die Quelldatei gefunden werden kann, pr&uuml;ft das Programm zun&auml;chst, ob die Datenbank komprimiert werden soll. Falls ja, wird die Komprimierung mit dem Aufruf der Prozedur Komprimiere initiiert.<\/p>\n<p>Danach wird entweder mit SichereMitArj das einfache Kopieren der Datei oder mit SichereOhneArj das Komprimieren unter Verwendung des Arj32-Packers gestartet. Mit dieser Logik k&ouml;nnen Sie die .mdb-Datei zuerst komprimieren und sie dann kopieren oder packen.<\/p>\n<pre>Public Sub Sichere(DatenbankID As Integer)\r\n    On Error GoTo Sichere_Fehler\r\n    Dim strQuelldatei As String\r\n    Dim rst As Recordset\r\n    Set rst = CurrentDb.OpenRecordset(\"SELECT * FROM tblDatensicherung \" _        & \"WHERE DatenbankID = \" & DatenbankID)\r\n    Do While Not rst.EOF\r\n        With rst\r\n           .Edit\r\n           !Letzte&auml;nderung = Now\r\n           !IstGestartet = True\r\n           !IstAbgeschlossen = False\r\n           !Fehlermeldung = \"\"\r\n           .Update\r\n        End With\r\n        If IstDateiVorhanden(Nz(rst!Quelldatei, \"\")) Then\r\n            If rst!IstKomprimieren Then\r\n                Komprimiere rst\r\n            End If\r\n            If rst!IstPacken Then\r\n                SichereMitArj rst\r\n            Else\r\n                SichereOhneArj rst\r\n            End If\r\n        Else\r\n            rst.Edit\r\n            rst!Fehlermeldung = rst!Fehlermeldung & _                \"Quelldatei konnte nicht gefunden werden.\"\r\n            rst!Letzte&auml;nderung = Now\r\n            rst.Update\r\n        End If\r\n        rst.Edit\r\n        rst!IstAbgeschlossen = True\r\n        rst!Letzte&auml;nderung = Now\r\n        rst.Update\r\nSichere_WeiterNachFehler:\r\n        rst.MoveNext\r\n    Loop\r\n    rst.Close\r\n    Set rst = Nothing\r\n    Exit Sub\r\nSichere_Fehler:\r\n    rst.Edit\r\n    rst!Fehlermeldung = rst!Fehlermeldung & Err.Description\r\n    rst!Letzte&auml;nderung = Now\r\n    rst.Update\r\n    GoTo Sichere_WeiterNachFehler\r\nEnd Sub<\/pre>\n<p><b>Quellcode 1<\/b><\/p>\n<p>Falls Sie eine Datenbank eventuell zuerst sowohl kopieren als auch packen wollen, dann m&uuml;ssen Sie statt If Then&#8230;Else ein Konstrukt verwenden, mit dem Sie die beiden Prozeduren auch nacheinander aufrufen k&ouml;nnen. In diesem Fall w&auml;re eventuell das Hinzuf&uuml;gen eines weiteren Feldes namens IstKopieren sinnvoll.<\/p>\n<pre>Public Sub GetDateiListe(ByRef strDateiliste() As String, strDateimaske As String)\r\n    Dim strDatei As String\r\n    Dim strPfad As String\r\n    ReDim strDateiliste(0)\r\n    strPfad = GetPfad(strDateimaske)\r\n    strDatei = Dir(strDateimaske)\r\n    Do While Len(strDatei) &gt; 0\r\n        ReDim Preserve strDateiliste(UBound(strDateiliste) + 1) As String\r\n        strDateiliste(UBound(strDateiliste) - 1) = strPfad & strDatei\r\n        strDatei = Dir\r\n    Loop\r\nEnd Sub<\/pre>\n<p><b>Quellcode 2<\/b><\/p>\n<p>Unabh&auml;ngig davon, welche Operationen im Einzelnen durchgef&uuml;hrt werden, schreibt die Prozedur Sichere am Ende den Wert True in das Feld IstAbgeschlossen. Au&szlig;erdem wird die aktuelle Systemzeit im Feld Letzte&auml;nderung hinterlegt.<\/p>\n<p>Tritt ein Fehler auf, verzweigt das Programm direkt zur Sprungmarke Sichere_Fehler. Das Programm schreibt die Fehlermeldung in das Feld Fehlermeldung, vermerkt die Systemzeit und setzt den Programmablauf fort.<\/p>\n<p>Mit dieser Logik gew&auml;hrleisten Sie, dass das Programm auch im Batchbetrieb ablaufen kann. Es d&uuml;rfte nur noch &auml;u&szlig;erst selten vorkommen, dass das Programm auf Grund eines Fehlers unterbrochen wird. Sie haben vielmehr die M&ouml;glichkeit, eventuell aufgetretene Fehler auch nach einem l&auml;ngeren Programmdurchlauf in der Tabelle tblDatensicherung zu sichten, zu analysieren und die Fehlerursache zu beheben.<\/p>\n<p>Das Komprimieren der Datenbank erfolgt in der Prozedur Komprimiere. Diese dimensioniert ein dynamisches Stringarray. Der Aufruf der Prozedur GetDateiListe f&uuml;llt dieses Array mit einer Liste der zu komprimierenden Dateinamen (s. Quellcode 2).<\/p>\n<h2>Dateiliste lesen<\/h2>\n<p><!--30percent--><\/p>\n<p>Die Prozedur GetDateiliste wird mit zwei Parametern aufgerufen. Der erste Parameter ist ein dynamisches Stringarray, der zweite eine Zeichenkette. Die Zeichenkette enth&auml;lt den Wert des Feldes Quelldatei aus dem aktuellen Datensatz. Dies entspricht dem Laufwerk, dem Pfad und einem Dateinamen oder einer Dateimaskierung.<\/p>\n<p>Beim ersten Aufruf der Dir()-Funktion pr&uuml;ft die Prozedur, ob die Datei gefunden werden kann. Falls ja, wird das dynamische Array um ein Element vergr&ouml;&szlig;ert. Bitte achten Sie darauf, dass die Dir()-Funktion stets nur den gefundenen Dateinamen liefert. Da das Array aber vollst&auml;ndige Dateinamen enthalten muss, werden per GetPfad()-Funktion das Laufwerk und der Pfad hinzugef&uuml;gt. Der Befehl ReDim Preserve redimensioniert das Stringarray unter Beibehaltung der bisher gespeicherten Daten. Mit UBound(strDateiliste) erhalten Sie den Index des h&ouml;chsten Elements. Dieser wird um 1 erh&ouml;ht und als neue Dimensionierung verwendet. Am Ende der Prozedur enth&auml;lt das Array alle Dateinamen aus dem aktuellen Verzeichnis.<\/p>\n<p>Falls der Aufruf ohne Verwendung von Wildcards erfolgte, enth&auml;lt das Array nur ein Element, beim Aufruf mit Wildcards enth&auml;lt es f&uuml;r jeden passenden Dateinamen ein Element. Da der Parameter ByRef &uuml;bergeben wird, kann die &uuml;bergeordnete Prozedur die Dateiliste verwenden.<\/p>\n<pre>Public Sub Komprimiere(ByRef rst As Recordset)\r\n    Dim strDatei As String\r\n    Dim strDateiliste() As String\r\n    Dim i As Integer\r\n    i = 0\r\n    GetDateiListe strDateiliste, rst!Quelldatei\r\n    rst.Edit\r\n    For i = 0 To UBound(strDateiliste) - 1\r\n        strDatei = strDateiliste(i)\r\n        Dim strTempdatei As String\r\n        strTempdatei = HoleZieldatei(strDatei, \"\", \".tmp\")\r\n        On Error GoTo Komprimiere_Fehler\r\n        DBEngine.CompactDatabase strDatei, strTempdatei\r\n        Kill strDatei\r\n        Name strTempdatei As strDatei\r\n        rst!Fehlermeldung = rst!Fehlermeldung & \"Datenbank \" & strDatei _            & \" wurde komprimiert.\"\r\n        GoTo Komprimiere_Weiter\r\nKomprimiere_Fehler:\r\n        rst!Fehlermeldung = rst!Fehlermeldung & \"Fehler beim Komprimieren von \" _            & strDatei & \": \" & Err.Description\r\n        Resume Komprimiere_Weiter\r\nKomprimiere_Weiter:\r\n    Next i\r\n    rst.Update\r\nEnd Sub<\/pre>\n<p><b>Quellcode 3<\/b><\/p>\n<h2>Fehlerbehandlung<\/h2>\n<p>Die Prozedur Komprimiere durchl&auml;uft die Dateiliste mit einer For Next-Schleife (s. Quellcode 3). Der einzelne Dateiname wird der Variablen strDatei zugewiesen. Die Anweisung<\/p>\n<pre>strTempdatei = HoleZieldatei(strDatei, _    \"\", \".tmp\")<\/pre>\n<p>ermittelt den Namen einer Zieldatei. Die Prozedur HoleZieldatei dient an dieser Stelle lediglich dazu, einen tempor&auml;ren Dateinamen zu ermitteln. Sie gewinnt im Zusammenhang mit dem Kopieren an Bedeutung und wird weiter unten in diesem Zusammenhang beschrieben. Das eigentliche Komprimieren erfolgt in drei Schritten:<\/p>\n<li>Die Anweisung DBEngine.CompactDatabase komprimiert die angegebene Quelldatei und schreibt diese in die Zieldatei. <\/li>\n<li>Die Kill-Anweisung l&ouml;scht die Quelldatei.<\/li>\n<li>Die Name-Anweisung weist der komprimierten Datei den urspr&uuml;nglichen Namen der Quelldatei zu. (<\/li>\n<p>Es gibt eine Reihe Fehler, die w&auml;hrend dieser Prozedur auftreten k&ouml;nnen. Eine Datenbank kann von einem anderen Anwender gesperrt sein, eine Datenbank kann ein nicht lesbares Format haben (zum Beispiel eine Datenbank in einer h&ouml;heren Access-Version), die Festplatte kann &uuml;berlaufen und so weiter. Die On Error-Goto-Anweisung soll diese und andere nicht vorhergesehene Fehler abfangen. Sie verzweigt deshalb auf eine Sprungmarke mit VBA-Code, der die aktuelle Fehlermeldung im gleichnamigen Feld des Datensatzes hinzuf&uuml;gt.<\/p>\n<pre>Private Sub SichereOhneArj(rst As Recordset)\r\n    Dim strQuelle As String\r\n    Dim strZiel As String\r\n    rst.Edit\r\n    strZiel = Nz(rst!Zieldatei, \"\")\r\n    strQuelle = Nz(rst!Quelldatei, \"\")\r\n    If IstMitWildcards(strQuelle) Then\r\n        rst!Fehlermeldung = rst!Fehlermeldung & \"Die Angabe von Wildcards in der \" _            \"Quelldatei ist nur zusammen mit dem Packen (ARJ32) implementiert.\"\r\n    Else\r\n        If IstMitWildcards(strZiel) Then\r\n            rst!Fehlermeldung = rst!Fehlermeldung & \"Bitte geben Sie eine \" _                \"Zieldatei ohne Wildcards an.\"\r\n        Else\r\n            strZiel = HoleZieldatei(strQuelle, strZiel, \".bak\")\r\n            FileCopy strQuelle, strZiel\r\n            If IstDateiVorhanden(strZiel) Then\r\n                rst!IstAbgeschlossen = True\r\n                rst!Fehlermeldung = rst!Fehlermeldung & \"Sicherung in Datei \" _                    & strZiel & \" ist erfolgt.\"\r\n            Else\r\n                rst!Fehlermeldung = rst!Fehlermeldung & \"Fehler beim Kopieren \" _                    \"von Datei \" & strQuelle & \" zu Datei \" & strZiel\r\n            End If\r\n        End If\r\n    End If\r\n    rst!Letzte&auml;nderung = Now\r\n    rst.Update\r\nEnd Sub<\/pre>\n<p><b>Quellcode 4<\/b><\/p>\n<p>Die Resume-Anweisung ist in diesem Zusammenhang besonders wichtig. Erst mit dieser Anweisung teilen Sie Access mit, dass der Fehler behandelt ist. Falls Sie die Resume-Anweisung weglassen, kann Access nur jeweils den ersten aufgetretenen Fehler behandeln. Beim zweiten On Error-Ereignis w&uuml;rde Access direkt in die aufrufende Prozedur verzweigen.<\/p>\n<p>Bei der Angabe einer Maskierung wie beispielsweise &#8230;\\Eigene Dateien\\*.mdb durchl&auml;uft Access die Schleife f&uuml;r jede .mdb-Datei einmal. Die Prozeduren schreiben das Laufwerk und den vollst&auml;ndigen Pfad sowie eine Erfolgs- oder Fehlermeldung f&uuml;r jede Datei additiv in das Feld Fehlermeldung. Da der Text sehr lang werden kann, ist dieses Feld als Memofeld definiert. Falls Sie sich in der Datenblatt- oder Formularansicht einen guten &uuml;berblick &uuml;ber den Inhalt des Feldes schaffen wollen, k&ouml;nnen Sie mit Shift + F2 das Zoom-Fenster &ouml;ffnen.<\/p>\n<p>Unter dem Sichern einer Datenbank ist das einfache Kopieren der .mdb-Datei mit der FileCopy-Anweisung zu verstehen. Diese Anweisung erfordert lediglich die Angabe einer Quelldatei und einer Zieldatei.<\/p>\n<p>Eingebettet wird der Kopiervorgang in die Prozedur  SichereOhneArj (s. Quellcode 4). Die Prozedur erwartet als Parameter den kompletten Datensatz. Sie liest zun&auml;chst die Namen der Quell- und Zieldateien ein.<\/p>\n<p>Sollte die Quelldatei oder die Zieldatei Platzhalter enthalten, wird die Prozedur abgebrochen und eine entsprechende Fehlermeldung in die Tabelle tblDatensicherung geschrieben.<\/p>\n<p>Anschlie&szlig;end ermittelt die Prozedur HoleZieldatei aus dem Namen der Quelldatei und dem Namen der Zieldatei (soweit vorhanden) einen Namen f&uuml;r die Zieldatei (s. Quellcode 5).<\/p>\n<pre>Private Function HoleZieldatei(strQuelle As String, strZiel As String, _    strErweiterung As String) As String\r\n    If Len(strZiel) = 0 Then\r\n        HoleZieldatei = DateinameFestlegen(strQuelle) & strErweiterung\r\n    Else\r\n        If Not (GetErweiterung(strZiel) = strErweiterung) Then\r\n            strZiel = strZiel & strErweiterung\r\n        End If\r\n        HoleZieldatei = strZiel\r\n    End If\r\nEnd Function<\/pre>\n<p><b>Quellcode 5<\/b><\/p>\n<pre>Public Function DateinameFestlegen(strQuelle As String) As String\r\n    DateinameFestlegen = GetPfad(strQuelle) & GetDateiOhneErweiterung(strQuelle) _        & \"_\" & Format(Date, \"YYYYMMDD\") & \"_\" & Format(Time, \"HHMMSS\") & \".\" _        & GetErweiterung(strQuelle)\r\nEnd Function<\/pre>\n<p><b>Quellcode 6<\/b><\/p>\n<pre>Public Function IstDateiVorhanden(ByVal strDatei As String) As Boolean\r\n    If Dir(strDatei) = \"\" Then\r\n        IstDateiVorhanden = False\r\n    Else\r\n        IstDateiVorhanden = True\r\n    End If\r\nEnd Function<\/pre>\n<p><b>Quellcode 7<\/b><\/p>\n<p>Schlie&szlig;lich wird der Kopiervorgang gestartet,  das Ergebnis mit der Funktion IstDateiVorhanden (s. Quellcode 6) &uuml;berpr&uuml;ft und es werden entsprechende Meldungen in die Tabelle tblDatensicherung geschrieben.<\/p>\n<h2>Zieldatei ermitteln<\/h2>\n<p>Genau hier liegt der Hase im Pfeffer. Was passiert, wenn die Zieldatei bereits existiert Soll das Programm die Datei einfach &uuml;berschreiben<\/p>\n<p>Diese Methode w&auml;re sicherlich zu unsicher. Zu schnell k&ouml;nnte so versehentlich eine wichtige .mdb-Datei f&uuml;r immer verloren gehen.<\/p>\n<p>Aus diesem Grund ermittelt die Funktion HoleZieldatei eine Zieldatei, die garantiert noch nicht existiert.<\/p>\n<p>Die Funktion unterscheidet zwei F&auml;lle: Wenn keine Zieldatei angegeben wurde, dann wird der Name der Zieldatei mit der Funktion DateinameFestlegen ermittelt und die mit dem Parameter strErweiterung &uuml;bergebene Dateiendung angeh&auml;ngt. Die Funktion DateinameFestlegen (s. Quellcode 6) setzt einen mit hoher Wahrscheinlichkeit einzigartigen Dateinamen zusammen, indem sie dem Namen der Quelldatei das Datum und die Uhrzeit zum Zeitpunkt des Backups hinzuf&uuml;gt. Wenn die Datenbank also nicht mehr als einmal pro Sekunde gesichert wird, ist dieser Dateiname einmalig.<\/p>\n<pre>Public Function GetPfad(strPfadUndDatei As String) As String\r\n    GetPfad = Left(strPfadUndDatei, Len(strPfadUndDatei) - _        Len(GetDateiMitErweiterung(strPfadUndDatei)))\r\nEnd Function<\/pre>\n<p><b>Quellcode 8<\/b><\/p>\n<pre>Public Function GetDateiOhneErweiterung(strPfadUndDatei As String) As String\r\n    Dim strDatei As String\r\n    strDatei = GetDateiMitErweiterung(strPfadUndDatei)\r\n    Dim strErweiterung As String\r\n    strErweiterung = GetErweiterung(strDatei)\r\n    If Len(strErweiterung) &gt; 0 Then strErweiterung = \".\" & strErweiterung\r\n    GetDateiOhneErweiterung = Left(strDatei, Len(strDatei) - Len(strErweiterung))\r\nEnd Function<\/pre>\n<p><b>Quellcode 9<\/b><\/p>\n<pre>Public Function GetErweiterung(strDateinameUndErweiterung As String) As String\r\n    Dim p As Integer\r\n    p = InStr(strDateinameUndErweiterung, \".\")\r\n    If p = 0 Then\r\n        GetErweiterung = strDateinameUndErweiterung\r\n    Else\r\n        GetErweiterung = GetErweiterung(Mid(strDateinameUndErweiterung, p + 1))\r\n    End If\r\nEnd Function<\/pre>\n<p><b>Quellcode 10<\/b><\/p>\n<pre>Public Function GetDateiMitErweiterung(strPfadUndDatei As String) As String\r\n    Dim p As Integer\r\n    p = InStr(strPfadUndDatei, \"\\\")\r\n    If p = 0 Then\r\n        GetDateiMitErweiterung = strPfadUndDatei\r\n    Else\r\n        GetDateiMitErweiterung = GetDateiMitErweiterung(Mid(strPfadUndDatei, p + 1))\r\n    End If\r\nEnd Function<\/pre>\n<p><b>Quellcode 11<\/b><\/p>\n<p>Dabei verwendet die Funktion die drei Funktionen GetPfad (s. Quellcode 8), GetDateiOhneErweiterung (s. Quellcode 9) und GetErweiterung (s. Quellcode 10), um den Namen der Zieldatei auseinander zu nehmen und zu dem neuen, einzigartigen Namen zusammenzusetzen.<\/p>\n<p>Die Funktionen sind weitgehend selbsterkl&auml;rend.<\/p>\n<h2>Dateiname mit Erweiterungberechnen<\/h2>\n<p>Eine besondere Erw&auml;hnung soll die Funktion GetDateiMitErweiterung finden (s. Quellcode 11).<\/p>\n<p>Diese Funktion erh&auml;lt als Parameter die vollst&auml;ndige Angabe von Laufwerk, Pfad, Dateiname und Erweiterung einer Datei. Der daraus zu berechnende Dateiname entspricht der Zeichenkette nach dem letzten Backslash (\\).<\/p>\n<p>Die Funktion berechnet bei ihrem ersten Aufruf zuerst die Position des ersten Backslash. Wenn Sie beispielsweise C:\\Temp\\Test.mdb als Parameter &uuml;bergeben, dann erh&auml;lt die Variable p den Wert 3. Solange p ungleich 0 ist, ruft die Funktion sich selbst rekursiv auf.<\/p>\n<p>Beim ersten rekursiven Aufruf lautet der Parameter Temp\\Test.mdb. Dies entspricht der Zeichenkette ab p + 1. Beim zweiten Aufruf lautet der Parameter Test.mdb. Da diese Zeichenkette keinen Backslash enth&auml;lt, wird p zum ersten Mal 0 und die Funktion gibt Test.mdb als Funktionswert an den ersten Aufruf zur&uuml;ck. Der erste Aufruf gibt den gleichen Wert zur&uuml;ck und so wird der Wert bis zur aufrufenden Programmzeile durchgereicht.<\/p>\n<p>Die nahezu identische Logik finden Sie in der Funktion GetErweiterung (s. Quellcode 10). Hier wird die Zeichenkette nach dem letzten Punkt als Erweiterung berechnet.<\/p>\n<p>Das gleichzeitige Packen der zu sichernden Datenbank ist in vielerlei Hinsicht effektiver als das einfache Kopieren: Mit dem Packen k&ouml;nnen Sie unter Umst&auml;nden viel Speicherplatz sparen und gleichzeitig die Zusatzfeatures des Packprogramms nutzen.<\/p>\n<p>Das in diesem Beitrag verwendete Programm Arj32.exe-Programm l&auml;uft im DOS-Fenster ab und l&auml;sst sich deshalb problemlos im Batchbetrieb benutzen. Wenn Sie das Programm mit der Option &#8211; starten, erhalten Sie einen umfangreichen Hilfstext, der etliche Parameter beschreibt.<\/p>\n<p>Am interessantesten d&uuml;rfte allerdings der Parameter -r sein. Dieser veranlasst Arj32.exe ausgehend von einem angegebenen Ordner alle untergeordneten Ordner nach den zu archivierenden Dateien zu durchsuchen. Mit der folgenden Anweisung k&ouml;nnen Sie beispielsweise alle .mdb-Dateien auf Laufwerk C:\\ in der Datei C:\\Backup.arj sichern:<\/p>\n<pre>ARJ32.exe a -r \"C:\\Backup.arj\" \"C:\\*.mdb\"<\/pre>\n<p>Obwohl dies sicherlich eine einfache Methode zum Sichern von Datenbanken ist, d&uuml;rfte sie nicht so ohne Weiteres praktikabel sein. Einerseits k&ouml;nnen auf diese Art und Weise trotz des Packens recht gro&szlig;e .arj-Dateien entstehen. Gleichzeitig dauert es unter Umst&auml;nden eine ganze Weile, bis alle .mdb-Dateien eines Verzeichnisses gesichert sind.<\/p>\n<p>Optimal ist die Kombination aus dedizierten Eintr&auml;gen in tblDatensicherung und der Verwendung von Arj32.exe. So k&ouml;nnen Sie gezielt eines oder mehrere Datenverzeichnisse angeben und diese dann rekursiv durchsuchen lassen.<\/p>\n<h2>Batch synchron ausf&uuml;hren<\/h2>\n<p>Der Aufruf von Arj32.exe erfolgt in der Prozedur SichereMitArj (s. Quellcode 12). Diese Datei ermittelt zun&auml;chst wiederum &uuml;ber die Funktion HoleZieldatei einen Namen f&uuml;r die Zieldatei. Anschlie&szlig;end setzt Sie die Anweisung f&uuml;r den Aufruf von Arj32.exe zusammen. Hier ist zu beachten, dass lange Dateinamen mit Blanks und anderen Sonderzeichen in Anf&uuml;hrungszeichen zu setzen sind. Deshalb werden sowohl der Quelldateiname als auch der Zieldateiname von Chr(34)-Zeichen eingefasst.<\/p>\n<p>Die auszuf&uuml;hrende DOS-Anweisung wird in der Stringvariablen strCommand zusammengesetzt. Diese Anweisung lie&szlig;e sich mit der Shell-Anweisung von VBA direkt ausf&uuml;hren. Windows f&uuml;hrt die Shell-Anweisung jedoch asynchron aus. Es &ouml;ffnet also ein DOS-Fenster und startet Arj32.exe, w&auml;hrend es quasi gleichzeitig die Ausf&uuml;hrung des VBA-Programms fortsetzt. Der anschlie&szlig;ende Aufruf der Anweisung IstDateiVorhanden(strZiel) w&uuml;rde immer den Wert False liefern.<\/p>\n<pre>Private Sub SichereMitArj(rst As Recordset)\r\n    Dim strZiel As String\r\n    Dim strCommand As String\r\n    Dim vErgebnis As Variant\r\n    '' Komprimieren mit und ohne Wildcards ist identisch\r\n    strZiel = HoleZieldatei(Nz(rst!Quelldatei, \"\"), Nz(rst!Zieldatei, \"\"), \".arj\")\r\n    If rst!IstRekursiv Then\r\n        strCommand = cArjExe & \" a -r \" & Chr(34) & strZiel & Chr(34) & \" \" _            & Chr(34) & rst!Quelldatei & Chr(34)\r\n    Else\r\n        strCommand = cArjExe & \" a -r \" & Chr(34) & strZiel & Chr(34) & \" \" _            & Chr(34) & rst!Quelldatei & Chr(34)\r\n    End If\r\n    rst.Edit\r\n    ExecCmd (strCommand)\r\n    DoEvents\r\n    If IstDateiVorhanden(strZiel) Then\r\n        rst!IstAbgeschlossen = True\r\n        rst!Fehlermeldung = rst!Fehlermeldung & \"Sicherung in Datei \" _            & strZiel & \" ist erfolgt.\"\r\n    Else\r\n        rst!Fehlermeldung = rst!Fehlermeldung & \"Die Zieldatei \" & strZiel _            & \" ist nach dem Komprimieren nicht vorhanden.\"\r\n    End If\r\n    rst!Letzte&auml;nderung = Now\r\n    rst.Update\r\nEnd Sub<\/pre>\n<p><b>Quellcode 12<\/b><\/p>\n<p>Um dies zu umgehen und gleichzeitig zu vermeiden, dass zu viele DOS-Fenster gleichzeitig ge&ouml;ffnet werden, sollten Sie die Anweisung synchron ausf&uuml;hren lassen.<\/p>\n<p>Der Programmcode hierf&uuml;r ist bereits in der Beispielanwendung enthalten. Er wurde von der Microsoft-Homepage heruntergeladen und in das Modul modShell eingef&uuml;gt. Die genaue Adresse der Quelle lautet:<\/p>\n<p>http:\/\/support.microsoft.com\/default.aspxscid=kb;EN-US;178116<\/p>\n<p>Dort finden Sie den Quellcode und eine Beschreibung des Programmcodes f&uuml;r die Prozedur ExecCmd, die das Beispielprogramm verwendet.<\/p>\n<h2>Erfolgsmeldung<\/h2>\n<p>Nach der Ausf&uuml;hrung der ExecCmd-Prozedur pr&uuml;ft das Programm mit IstVorhanden, ob Arj32.exe die spezifizierte Zieldatei wirklich geschrieben hat. Falls die Datei vorhanden ist, vermerkt das Programm eine Erfolgsmeldung in dem Datenfeld Fehlermeldung, andernfalls schreibt es einen Fehlertext in dieses Feld.<\/p>\n<p>Die in den vorhergehenden Kapiteln vorgestellten Funktionen und Prozeduren zum Sichern von Datenbankdateien sollen nun als Grundlage f&uuml;r das zeitgesteuerte Sichern von Datenbanken verwendet werden.<\/p>\n<pre>Private Sub Form_AfterUpdate()\r\n    Dim db As DAO.Database\r\n    Dim rst As DAO.Recordset\r\n    Dim strAccessPfad As String\r\n    Dim strDatenbankpfad As String\r\n    Dim intWochentage As Integer\r\n    Dim lngJobID As Long\r\n    strDatenbankpfad = Datenbankpfad\r\n    strAccessPfad = DLookup(\"Wert\", \"tblParameter\", \"Parameter = ''PfadZuAccess''\")\r\n    Set db = CurrentDb\r\n    Set rst = db.OpenRecordset(\"SELECT * FROM tblDatensicherung \" _        & \"WHERE DatenbankID = \" & Me.DatenbankID, dbOpenDynaset)\r\n    Do While Not rst.EOF\r\n        If Not IsNull(rst!JobID) Then\r\n            TaskLoeschen rst!JobID\r\n        End If\r\n        intWochentage = IIf(rst!Montag = True, 1, 0) + _            IIf(rst!Dienstag = True, 2, 0) + IIf(rst!Mittwoch = True, 4, 0) _            + IIf(rst!Donnerstag = True, 8, 0) + IIf(rst!Freitag = True, 16, 0)             + IIf(rst!Samstag = True, 32, 0) + IIf(rst!Sonntag = True, 64, 0)\r\n        If (TaskAnlegen(Chr(34) & strAccessPfad & Chr(34) & \" \" & Chr(34) _            & CurrentDb.Name & Chr(34) & \" \/cmd \" & Chr(34) & rst!DatenbankID _            & Chr(34), rst!Uhrzeit, True, intWochentage, , True, lngJobID)) &gt; 0 Then\r\n            MsgBox \"Fehler beim Anlegen des Tasks f&uuml;r die Datenbank mit der Nummer \" _                & rst!DatenbankID\r\n        End If\r\n        If Not IsNull(lngJobID) Then\r\n            rst.Edit\r\n            rst!JobID = lngJobID\r\n            rst.Update\r\n        End If\r\n        rst.MoveNext\r\n    Loop\r\nEnd Sub<\/pre>\n<p><b>Quellcode 13<\/b><\/p>\n<h3>Hinweis<\/h3>\n<p>Im Beitrag Geplante Tasks mit Access in der vorliegenden Ausgabe von Access im Unternehmen finden Sie alle grundlegenden Informationen zum Umgang mit dem Windows-Dienst Geplante Tasks und zum codegesteuerten Anlegen von zeitgesteuerten Aufgaben. <\/p>\n<h2>Festlegen vonSicherungsparametern<\/h2>\n<p>Die meisten Parameter der Tabelle tblDatensicherung wurden weiter oben bereits besprochen. Wichtig f&uuml;r die Festlegung von zeitlich gesteuerten Sicherungsvorg&auml;ngen sind die Felder zur Angabe der Uhrzeit, zu der die Sicherung erfolgen soll, sowie die entsprechenden Wochentage.<\/p>\n<p>Diese Informationen werden in den Feldern Uhrzeit, Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag und Sonntag gespeichert. Im Formular frmDatensicherung befinden sich entsprechende Steuerelemente zur Eingabe dieser Informationen.<\/p>\n<h2>Aktualisierung von Tasks<\/h2>\n<p>Um sicherzustellen, dass der im Taskplaner gespeicherte Task zu einem Datensatz der Tabelle tblDatensicherung immer den aktuellen Stand hat, soll bei einer &auml;nderung der Parameter des Sicherungsvorgangs immer der aktuelle Task gel&ouml;scht und neu angelegt werden.<\/p>\n<p>Daher verwenden Sie die Ereigniseigenschaft Nach Aktualisierung des Formulars, um die entsprechenden Schritte durchzuf&uuml;hren.<\/p>\n<p>Den genauen Inhalt der dazugeh&ouml;renden Ereignisprozedur finden Sie in Quellcode 13.<\/p>\n<p>Die Prozedur ermittelt den Pfad der aktuellen Datenbank &uuml;ber die Funktion Datenbankpfad und den Pfad zu MSAccess.exe &uuml;ber den in der Tabelle tblParameter gespeicherten Wert.<\/p>\n<p>Anschlie&szlig;end &ouml;ffnet sie eine Datensatzgruppe mit dem Datensatz aus der Tabelle tblDatensicherung, der soeben ge&auml;ndert wurde. Je nachdem, ob der Datensatz bereits einen Wert f&uuml;r das Feld JobID enth&auml;lt, was darauf hinweist, dass bereits ein Task im Taskplaner angelegt ist, l&ouml;scht die Prozedur den entsprechenden Eintrag.<\/p>\n<p>Anschlie&szlig;end legt die Prozedur einen neuen Task mit den aktuellen im Datensatz enthaltenen Informationen an. Dabei werden drei Parameter w&auml;hrend der Laufzeit der Prozedur festgelegt:<\/p>\n<p>Der erste Parameter ist die eigentliche Anweisung, die der Task ausf&uuml;hren soll. Diese Anweisung wird aus dem Pfad zur Datei MSAccess.exe, der zu startenden Datenbank und dem Parameter cmd mit der Datensatznummer zusammengesetzt. Die Anweisung k&ouml;nnte beispielsweise so aussehen:<\/p>\n<pre>\"c:\\Office\\MSAccess.exe\" \"c:\\Datenbanken\\Sicherung.mdb\" \/cmd \"1\"<\/pre>\n<p>Der zweite Parameter ist eine Zahl zur Angabe der Wochentage, an denen die Sicherung durchgef&uuml;hrt werden soll.<\/p>\n<p>Diese Zahl wird aus der Summe der zu den einzelnen Wochentagen geh&ouml;renden Zahlenwerte ermittelt. Der dritte Parameter ist die Uhrzeit, zu der die Sicherung durchgef&uuml;hrt werden soll.<\/p>\n<p>Zum L&ouml;schen des alten und Anlegen des neuen Tasks werden die beiden Funktionen TaskLoeschen und TaskAnlegen verwendet, die beide in dem bereits oben erw&auml;hnten Beitrag Geplante Tasks mit Access beschrieben werden.<\/p>\n<p>Die Funktion TaskAnlegen enth&auml;lt noch einen Parameter namens lngJobID, der durch die Funktion gef&uuml;llt wird und der die JobID des neuen Tasks enth&auml;lt.<\/p>\n<p>Dieser Wert wird in die Tabelle tblDatensicherung eingetragen, damit der entsprechende Task bei der n&auml;chsten Aktualisierung der Parameter dieses Sicherungsvorgangs gel&ouml;scht werden kann.<\/p>\n<p>Die hier vorgestellte Musterl&ouml;sung hilft, regelm&auml;&szlig;ige Sicherungen von Datenbankdateien zu erstellen.<\/p>\n<p>Sie l&auml;sst sich mit wenig Aufwand f&uuml;r die Sicherung anderer Dateien anpassen &#8211; wenn Sie also beispielsweise nicht den Hauptteil Ihrer Arbeitszeit in die Entwicklung von Datenbanken stecken, sondern beispielsweise viel mit Word arbeiten, d&uuml;rfte Ihnen eine regelm&auml;&szlig;ige Sicherung dieser Dateien ebenso am Herzen liegen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Access speichert alle Objekte einer Datenbank in einer einzigen Datei mit der Erweiterung .mdb. Wenn Sie einmal die Zeit f&uuml;r das Erstellen der Datenbankobjekte und die Zeit f&uuml;r die Datenbearbeitung zusammenrechnen, dann erhalten Sie einen Eindruck von dem Wert der Datenbankdatei. Der einzige wirksame Schutz gegen den totalen Verlust der .mdb-Datei ist die regelm&auml;&szlig;ige Datensicherung auf einem externen Medium. Dabei und bei einigen anderen Aufgaben hilft Ihnen das Tool, das wir Ihnen in diesem Beitrag vorstellen.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[66022004,662004,44000040,44000038],"tags":[],"class_list":["post-55000213","post","type-post","status-publish","format-standard","hentry","category-66022004","category-662004","category-Allgemein","category-Sicherheit"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Datenbanken komprimieren, speichern und sichern - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/Datenbanken_komprimieren_speichern_und_sichern\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Datenbanken komprimieren, speichern und sichern\" \/>\n<meta property=\"og:description\" content=\"Access speichert alle Objekte einer Datenbank in einer einzigen Datei mit der Erweiterung .mdb. Wenn Sie einmal die Zeit f&uuml;r das Erstellen der Datenbankobjekte und die Zeit f&uuml;r die Datenbearbeitung zusammenrechnen, dann erhalten Sie einen Eindruck von dem Wert der Datenbankdatei. Der einzige wirksame Schutz gegen den totalen Verlust der .mdb-Datei ist die regelm&auml;&szlig;ige Datensicherung auf einem externen Medium. Dabei und bei einigen anderen Aufgaben hilft Ihnen das Tool, das wir Ihnen in diesem Beitrag vorstellen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Datenbanken_komprimieren_speichern_und_sichern\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-06T15:17:39+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg05.met.vgwort.de\/na\/01dac5af129a4f928db7960f5da06643\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"22\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenbanken_komprimieren_speichern_und_sichern\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenbanken_komprimieren_speichern_und_sichern\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Datenbanken komprimieren, speichern und sichern\",\"datePublished\":\"2020-05-06T15:17:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenbanken_komprimieren_speichern_und_sichern\\\/\"},\"wordCount\":3459,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenbanken_komprimieren_speichern_und_sichern\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/01dac5af129a4f928db7960f5da06643\",\"articleSection\":{\"0\":\"2\\\/2004\",\"1\":\"2004\",\"3\":\"Sicherheit\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenbanken_komprimieren_speichern_und_sichern\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenbanken_komprimieren_speichern_und_sichern\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenbanken_komprimieren_speichern_und_sichern\\\/\",\"name\":\"Datenbanken komprimieren, speichern und sichern - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenbanken_komprimieren_speichern_und_sichern\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenbanken_komprimieren_speichern_und_sichern\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/01dac5af129a4f928db7960f5da06643\",\"datePublished\":\"2020-05-06T15:17:39+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenbanken_komprimieren_speichern_und_sichern\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenbanken_komprimieren_speichern_und_sichern\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenbanken_komprimieren_speichern_und_sichern\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/01dac5af129a4f928db7960f5da06643\",\"contentUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/01dac5af129a4f928db7960f5da06643\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenbanken_komprimieren_speichern_und_sichern\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Datenbanken komprimieren, speichern und sichern\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Datenbanken komprimieren, speichern und sichern - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/Datenbanken_komprimieren_speichern_und_sichern\/","og_locale":"de_DE","og_type":"article","og_title":"Datenbanken komprimieren, speichern und sichern","og_description":"Access speichert alle Objekte einer Datenbank in einer einzigen Datei mit der Erweiterung .mdb. Wenn Sie einmal die Zeit f&uuml;r das Erstellen der Datenbankobjekte und die Zeit f&uuml;r die Datenbearbeitung zusammenrechnen, dann erhalten Sie einen Eindruck von dem Wert der Datenbankdatei. Der einzige wirksame Schutz gegen den totalen Verlust der .mdb-Datei ist die regelm&auml;&szlig;ige Datensicherung auf einem externen Medium. Dabei und bei einigen anderen Aufgaben hilft Ihnen das Tool, das wir Ihnen in diesem Beitrag vorstellen.","og_url":"https:\/\/access-im-unternehmen.de\/Datenbanken_komprimieren_speichern_und_sichern\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-06T15:17:39+00:00","og_image":[{"url":"http:\/\/vg05.met.vgwort.de\/na\/01dac5af129a4f928db7960f5da06643","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"22\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Datenbanken_komprimieren_speichern_und_sichern\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Datenbanken_komprimieren_speichern_und_sichern\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Datenbanken komprimieren, speichern und sichern","datePublished":"2020-05-06T15:17:39+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Datenbanken_komprimieren_speichern_und_sichern\/"},"wordCount":3459,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Datenbanken_komprimieren_speichern_und_sichern\/#primaryimage"},"thumbnailUrl":"http:\/\/vg05.met.vgwort.de\/na\/01dac5af129a4f928db7960f5da06643","articleSection":{"0":"2\/2004","1":"2004","3":"Sicherheit"},"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Datenbanken_komprimieren_speichern_und_sichern\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Datenbanken_komprimieren_speichern_und_sichern\/","url":"https:\/\/access-im-unternehmen.de\/Datenbanken_komprimieren_speichern_und_sichern\/","name":"Datenbanken komprimieren, speichern und sichern - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Datenbanken_komprimieren_speichern_und_sichern\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Datenbanken_komprimieren_speichern_und_sichern\/#primaryimage"},"thumbnailUrl":"http:\/\/vg05.met.vgwort.de\/na\/01dac5af129a4f928db7960f5da06643","datePublished":"2020-05-06T15:17:39+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Datenbanken_komprimieren_speichern_und_sichern\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Datenbanken_komprimieren_speichern_und_sichern\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Datenbanken_komprimieren_speichern_und_sichern\/#primaryimage","url":"http:\/\/vg05.met.vgwort.de\/na\/01dac5af129a4f928db7960f5da06643","contentUrl":"http:\/\/vg05.met.vgwort.de\/na\/01dac5af129a4f928db7960f5da06643"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Datenbanken_komprimieren_speichern_und_sichern\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Datenbanken komprimieren, speichern und sichern"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000213","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55000213"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000213\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000213"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000213"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000213"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}