Datensicherung



Festplattensicherung - Sicherung auf dem ServerVisual Basic Script -

Speicherplatz sparen




Datensicherung auf der lokalen bzw. externen Festplatte



Die Datenbank ist also erstellt und wurde mit Makros und Modulen optimiert !

Jetzt ist man sehr stolz auf seine Arbeit, die ja auch viel Zeit und Mühe gekostet hat.
Mit jedem Tag gesellen sich mehr Daten zur DB dazu.

Auf die Idee, die Datenbank nochmal auf der lokalen bzw. externen Festplatte zu sichern, ist man ja auch schon gekommen, doch man muss jedesmal erst im Explorer mühsam die DB suchen, kopieren und die alte Sicherung ersetzen.

Schön wäre doch ein Tool, das beim Schließen der DB diese Aufgabe übernimmt:

Dazu wird einfach ein ADD-IN (Externes Modul zur Automation von Abläufen) erstellt, das nach Fertigstellung und Einbindung in Access, jeder beliebigen Access-Anwendung zur Datensicherung zur Verfügung steht ! Man sollte das Add-In nach erfolgreichem Test von einer *.mdb-Datei ('normale' Access Datenbank, in der der Quelltext frei zugänglich ist) zu einer *.mde-Datei ('gesicherte' Access Datenbank, in der auf den Quelltext nicht mehr zugegriffen werden kann - auch nicht vom Ersteller der *.mde-Datei - eignet sich gut zur Weitergabe von DB, die nicht modifiziert werden sollen) wandeln.

Dazu sind folgende Schritte nötig :

1. Erstellen Sie eine beliebige leere Access Datenbank.
2. Legen Sie ein neues Modul an.
3. Fügen Sie folgenden Code ein :
 

'BOF


D E K L A R A T I O N E N

Option Compare Database
Option Explicit



'1.F U N K T I O N

Function strt()
Dim antw%
antw = MsgBox("Soll die Datenbank auf Laufwerk C: gesichert werden ?", vbYesNo + vbQuestion, "DATENSICHERUNG")
If antw = vbYes Then
DoCmd.Minimize
datensicherungC
Else
DoCmd.Quit acQuitSaveAll
Exit Function
End If
DoCmd.Quit
End Function


'2.F U N K T I O N

Function datensicherungC()
Dim verz$
Dim antw%
Dim dbName As String, dbNameKurz As String
Dim fs As New FileSystemObject
Dim fehlerNr As Integer
Const VerzSich = "C:\DB\SICHERUNG\"
alleSchließen
fehlerNr = 0
On Error GoTo fehler
Application.Echo True, "Die Datenbank wird gesichert..."
dbName = Application.CurrentDb.Name
dbNameKurz = fs.GetFileName(dbName)
If FileExists("SICHERUNG", "C:\DB\") = False Then
MkDir "c:\DB\SICHERUNG"
End If
verz = CStr(Month(Date)) & "_" & CStr(Year(Date))
If FileExists(verz, VerzSich) = False Then
MkDir VerzSich & verz
End If
If FileExists(dbNameKurz, VerzSich & verz & "\") = True Then
antw = MsgBox("Soll die vorhandene Datei überschrieben werden ?", vbQuestion + vbYesNo, "Datei ersetzen ?")
If antw = vbYes Then
Kill VerzSich & verz & "\" & dbNameKurz
Else
MsgBox "Datensicherung wurde abgebrochen !", vbInformation, "Vorgang beendet !"
Exit Function
End If
End If
fs.copyfile dbName, VerzSich & verz & "\X_" & dbNameKurz, True
Application.DBEngine.CompactDatabase VerzSich & verz & "\X_" & dbNameKurz, VerzSich & verz & "\" & dbNameKurz
fs.DeleteFile VerzSich & verz & "\X_" & dbNameKurz, True
Application.Echo True, ""
Exit Function
fehler:
fehlerNr = fehlerNr + 1
If Err.Number = 75 Then
Resume Next
ElseIf fehlerNr <= 5 Then
Resume
ElseIf fehlerNr> 5 Then
MsgBox Err.Number & " -> " & Err.Description
End If
End Function


'3. F U N K T I O N

Sub alleSchließen()
Dim rs As Recordset
Dim frm As Form
For Each rs In CurrentDb.Recordsets
rs.Close
Next rs
End Sub


'4.F U N K T I O N

Function FileExists(Datei$, Optional Verzeichnis) As Boolean
With Application.FileSearch
.FileName = Datei
If IsMissing(Verzeichnis) = False Then
.LookIn = Verzeichnis
Else
.LookIn = CurDir()
End If
.SearchSubFolders = False
.Execute
If .FoundFiles.Count> 0 Then
FileExists = True
Else
FileExists = False
End If
End With
End Function


'EOF

Testen Sie das Modul mit dem Tool Debuggen (Kompilieren der DB).
Sollte ein Fehler auftreten müssen Sie auf die Fehlermeldung hin, Ihre Syntax prüfen bzw. prüfen, ob im Menue Extras --> Verweise alle benötigten Bibliothekendateien (*.dll, ...) geladen sind !
Der Verweis ( Menue Extras --> Verweise ) : Microsoft Scripting Runtime muss geladen sein !

Dann wird dieses Modul abgespeichert und die neu erstellte DB mit diesem einen Modul unter einem beliebigen Namen abgespeichert.
( z.B AddIn.mdb )
In diesem Modul wird festgelegt, dass die zu sichernde DB im Verzeichnis : C:\DB\SICHERUNG abgelegt werden soll !
Passen Sie diese Einstellungen im Modul an Ihre Bedürfnisse an !

Ich habe das Modul auch als Download für Sie --> AddIn.txt . Sie Öffnen einfach die Textdatei und kopieren alles, was sich in dieser Datei befindet in die Zwischenablage ( einfach String + C klicken ) , dann erstellen Sie ein neues Modul, markieren die Textzeile Option Compare Database und fügen den Text der Zwischenablage ein.

Sollte dieses AddIn unter XP nicht funktionieren, nehmen Sie einfach diesen Code : AIXP.txt .

Jetzt kommt der spannende Teil für diejenigen, die noch nie in die Windows-Registrierung reingeschaut haben :

Öffnen Sie im Explorer das Verzeichnis : WINDOWS
Suchen Sie die Datei : REGEDIT.EXE

Öffnen Sie die Datei mit Doppelklick



Sie sehen hier, wie Sie den Schlüssel : &Datenbank sichern mit dessen Werten anlegen müssen. Statt D:\DB\SYSTEM\ verwenden Sie den Pfad, auf dem sich Ihre AI.mdb befindet.

BESCHREIBUNG:

Suchen Sie den Ordner HKEY_LOCAL_MACHINE
Doppelkick auf diesen Ordner !
Suchen Sie den Ordner Software
Doppelkick auf diesen Ordner !
Suchen Sie den Ordner Microsoft
Doppelkick auf diesen Ordner !
Suchen Sie den Ordner Office
Doppelkick auf diesen Ordner !
Suchen Sie den Ordner 9.0 ( für Access 2000 ) | bzw. 10.0 ( für Access 2002 = Access XP )
Doppelkick auf diesen Ordner !
Suchen Sie den Ordner Access
Doppelkick auf diesen Ordner !
Suchen Sie den Ordner Menu Add-Ins
Doppelkick auf diesen Ordner !
Klicken Sie mit der rechten Maustaste auf den geöffneten Ordner MenuAdd-Ins
Gehen Sie auf das erscheinende Menue Neu und dann auf Schlüssel
Benennen Sie den neuen Ordner in zB. &Datenbank sichern
Klicken Sie mit der rechten Taste auf den neu benannten Ordner &Datenbank sichern
Gehen Sie auf das erscheinende Menue Neu und dann auf Zeichenfolge
Benennen Sie diese neue Zeichenfolge, die auf der rechten Explorerseite erschienen ist in Expression um !
Klicken Sie mit der rechten Taste auf den neuen Schlüssel Expression und tragen Sie im erschienenen Fenster im Feld Wert den Wert --> =strt() <-- (ohne Anführungszeichen !) ein ! ( Dies ruft die erstellte Function strt() auf, die wir oben angelegt haben .)
Erstellen Sie noch einen neuen Schlüssel für den Ordner &Datenbank sichern
Benennen Sie diesen neuen Schlüssel als Library !
Klicken Sie mit der rechten Taste auf den neuen Schlüssel Library und tragen Sie im erschienenen Fenster im Feld Wert den Wert --> C:\DB\PROGRAMM\AddIn.mdb <-- (ohne Anführungszeichen !) ein ! ( Von hier wird also die Function strt() aus der AddIn Datenbank 'AI.mdb' ausgeführt. )
(Diesen Wert passen Sie bitte Ihren Erfordernissen an : Je nachdem wo sich Ihre DB befindet, in der das oben erstellte Modul enthalten ist ! )

Speichern Sie die Registrierung ab ( einfach Schliessen ) und schon steht das neue Add In im Access Menue Extras zur Verfügung !

Hier sehen Sie, wie Sie dann aus jeder Datenbank dieses Add In ausführen können:



Sollten Sie sich nicht an die Registry wagen, lassen Sie Access diesen Job übernehmen.
Erstellen Sie eine neue Systemtabelle, die folgenden Namen tragen muss: USysRegInfo !
Haben Sie vor, Ihr als *.mdb gespeichertes AddIn nach dem fehlerfreien Test in eine *.mde Datenbank umwandeln zu lassen, dann müssen Sie natürlich alle *.mdb Einträge in *.mde umändern !

Soweit die Sicherung auf der Festplatte .

Warum DB ? - Start - Optionen - Struktur - Hilfe - Objekte - Tabellen - Beziehungen - Abfragen - Formulare - Berichte - Seiten - Makros - Module-VBA - Sicherung - Links

 

 

Datensicherung auf dem Server

Haben Sie die Möglichkeit Ihre Daten auf einem Server abzusichern? Wenn ja, dann können Sie entweder die oben geschilderte Möglichkeit des AddIn nutzen (an das Laufwerk des Servers adaptieren) oder Sie nutzen die Funktion 'Verzeichnisse synchronisieren ' des WinCommanders. Dabei würde ich die aktuelle Version der Datenbank auf der lokalen Festplatte durch 'Datei --> Speichern unter' mit dem aktuellen Datum als Anhang versehen, abspeichern, bevor die Verzeichnisse synchronisiert werden.

 


Warum DB ? - Start - Optionen - Struktur - Hilfe - Objekte - Tabellen - Beziehungen - Abfragen - Formulare - Berichte - Seiten - Makros - Module-VBA - Sicherung - Links

 

 








Beispiel für ein Visual Basic Script :



Öffnen Sie den Editor
Legen Sie dort eine neue Datei an
Schreiben Sie folgende Zeilen in die neue Datei :

Option Explicit

Dim DateiName,DateiKopie,FileSyst

Set FileSyst=Wscript.CreateObject("Scripting.Filesystemobject")
DateiName=("C:\DB\Test.mdb")
DateiKopie=("A:\Test.mdb")
msgbox"Legen Sie die Sicherungsdiskette ein !",vbokonly,"Diskette einlegen !"
FileSyst.CopyFile DateiName,DateiKopie,True


Speichern Sie diese Datei als 'Beliebiger_Name'.vbs ab.
Erstellen Sie eine Verknüpfung auf dem Desktop und schon können Sie beim Doppelklick Ihre Datei ( in diesem Falle Test.mdb vom Verzeichnis C:\DB\ in das Verzeichnis A:\ ) kopieren.

Die Einstellung True legt fest, dass die eventuell bereits vorhandene Datei auf der Diskette überschrieben werden soll !

Voraussetzung für dieses VBA-Script ist die Installation des Windows Sripting Hosts ( WSH ), dieses Programm ist Bestandteil von WIN 98 und WIN NT 5.0, Sie müssen es nur beim Installieren unter der Rubrik : Zubehör aktivieren .

Nachinstallation :
Start-->Einstellungen-->Systemsteuerung-->Software-->Windows Komponenten-->Zubehör.

Ansonsten finden Sie den WSH auf der Microsoft-Seite , Sie geben den Begriff einfach in die MS Suchmaschine ein.

Ich habe dieses VBA-Script auch als Download für Sie : Kopie.vbs (1 kB ).


Warum DB ? - Start - Optionen - Struktur - Hilfe - Objekte - Tabellen - Beziehungen - Abfragen - Formulare - Berichte - Seiten - Makros - Module-VBA - Sicherung - Links

 

 

 

 








Tips zum Speichersparen in Access Datenbanken



Access Datenbanken werden ziemlich schnell sehr gross.

Jede Tabelle , Abfrage , jedes Makro und Modul beansprucht für sich schon Speicherplatz.

Formulare und Berichte wollen wir bei der Betrachtung mal aussen vor lassen .
In den Tabellen kann man schon allein durch die Auswahl der einzelnen Felddatentypen und deren Grössen bestimmen, wieviel Speicherplatz diese beanspruchen.

Beispiel : Haben Sie als Felddatentyp Text eingestellt, können Sie die Länge der Zeichen bestimmen .
Wissen Sie genau, wie lang die Tabelleneintragungen maximal sein werden, so legen Sie dort bereits fest, daß der einzutragene Text nicht länger als beispielsweise 25 Zeichen sein darf.

Beim Felddatentyp Zahl sind die Unterschiede beim Speicherbedarf der einzelnen Datentypen auch nicht zu vernachlässigen !
Ich sage Ihnen : Es 'läppert' sich zusammen.

Lesen Sie bitte dazu in der Online-Hilfe Ihrer Access-Version nach.

Bei den Abfragen ist in der o.g. Richtung nichts zu machen, es werden die Felddatentypen der Tabellen automatisch übernommen.

Aber die Frage der Erstellung von festen Abfragen sollten wir hier einmal betrachten !
Brauchen Sie die Abfragen für die Erstellung eines Berichtes oder für die Datenanzeige in einem Formular, so gibt es die Möglichkeit, diese Abfragen zur Laufzeit von Access erst dann zu erstellen, und somit den Speicherplatz der Abfrage zu sparen.

Sie sollten erst einmal ein Startformular erstellen, aus dem Sie in Ihrer Anwendung alle erforderlichen Maßnahmen zur Navigation vornehmen.

Beispiel : Nehmen wir einmal an, Sie möchten ein Formular anzeigen, das auf einer Abfrage beruht.
Dazu müssen Sie natürlich vorher die Abfrage erstellen. Sie haben jetzt also eine Abfrage und ein Formular in der DB gespeichert.
Ich habe diese Geschichte anders realisiert : Ich habe zuerst eine Tabellenerstellungsabfrage erstellt.
Danach habe ich aus der neu erstellten Tabelle das Formular erstellt.
Jetzt habe ich in der Entwurfsansicht der Tabellenerstellungsabfrage die SQL-Ansicht gewählt und die SQL-Anweisung kopiert.
Dann gehe ich in die Entwurfsansicht des Startformulars, von dem aus ich über eine Schaltfläche das auf der Tabelle der Tabellenerstellungsabfrage basierende Formular öffne, und lege in den Eigenschaften der Schaltfläche unter Ereigniseigenschaften --> Beim Klicken folgenden Code fest :

DoCmd.SetWarnings False <-- Setzt die Access-Warnmeldungen auf A U S
DoCmd.RunSQL"<-- Und hier wird dann die kopierte SQL-Anweisung eingefügt !-->"
<--Es ist darauf zu achten, das die SQL-Anweisung in einer Zeile steht, und diese mit Anführungszeichen endet !
Nähere Informationen : Wie immer in der Access Online-Hilfe
DoCmd.OpenForm ("<--Hier steht der Formularname des Formulars, das auf der Tabelle basiert !-->")

Dann können Sie das Formular schließen und speichern.
Es wird jetzt beim Klicken auf die Schaltfläche die Abfrage ausgeführt und die Tabelle dadurch neu erstellt. Dann wird das Formular geöffnet.
Funktioniert dies beim Ausprobieren, können Sie die Tabellenerstellungsabfrage löschen.
Jetzt fragen Sie : So ich habe also eine Abfrage weniger, dafür aber eine Tabelle mehr !?!

Das ist korrekt, jetzt werden wir diese Situation ändern : Gehen Sie wieder in die Entwurfsansicht des Startformulars, von dem Sie das o.g. Formular öffnen.
Dort legen Sie eine neue Schaltfläche an mit der Sie dann alle nicht momentan benötigten Tabellen ( in unserem Beispiel die Tabelle, die von der Tabellenerstellungsabfrage erstellt wird ) löschen.
Unter diese Schaltfläche schreiben Sie folgenden Code in die Ereigniseigenschaft-->Beim Klicken :

DoCmd.SetWarnings False
Docmd.DeleteObject acTable ,("
<--Den Namen Ihrer Tabelle-->")

Jetzt wird beim Klicken auf die Schaltfläche die Tabelle gelöscht.
Keine Sorge, wenn Sie auf die SF klicken, um das Formular wieder zu öffnen, wird ja die Tabelle neu erstellt!

So spare ich erheblich Speicherplatz in der Anwendung, da ich die Tabellen für die Formulare erst dann erstellen lasse, wenn ich sie wirklich brauche.

Bei den Makros sollte man auch bedenken, dass das Makro an sich Speicher belegt.

So sollte man nicht für jede einzelne Aktion ein gesondertes Makro erstellen, sondern auf Makrogruppen zurückgreifen!

Für Module sieht es ähnlich aus : Wenn Sie von verschiedenen Formularen oder Berichten immer die selben Codes ausführen lassen, dann schreiben Sie Ihren Programmcode lieber in ein Standardmodul , als diese Aktionen in jedem Formular oder Bericht einzeln zu programmieren !

Beispiel : Wollen Sie zum Beispiel immer beim Öffnen der Formulare und Berichte diese in der maximierten Ansicht sehen, und Ihre eigene Menueleiste anzeigen, so schreiben Sie dies einmal in ein Standardmodul und legen in den Eigenschaften der einzelnen Formulare und Berichte in den Ereigniseinstellungen --> Beim Öffnen fest,
dass dieses Modul ausgeführt wird.

Standardmodule bieten zu dem noch den Vorteil, dass die gewünschten Veränderungen nur einmal programmiert werden müssen.

Ich empfehle Ihnen auf jeden Fall die Anschaffung von Literatur über VBA (Visual Basic for Applications) !
Auch in der Literatur von Access 2000 sind meist ein paar Programmbeispiele enthalten, die Sie ruhig einmal nachempfinden sollten.

Viel Spass beim Ausprobieren !



Warum DB ? - Start - Optionen - Struktur - Hilfe - Objekte - Tabellen - Beziehungen - Abfragen - Formulare - Berichte - Seiten - Makros - Module-VBA - Sicherung - Links