Office: (Office 2003) Datenbank-Backup aus VBA

Helfe beim Thema Datenbank-Backup aus VBA in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Hallo, ich bin vor die Aufgabe gestellt, aus der Datenbank die Möglichkeit zu bieten, per Knopfdruck in einem Formular die ganze Datenbank als... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von foxyfox2000, 2. Februar 2005.

  1. Datenbank-Backup aus VBA


    Hallo,

    ich bin vor die Aufgabe gestellt, aus der Datenbank die Möglichkeit zu bieten, per Knopfdruck in einem Formular die ganze Datenbank als Backup.mdb in ein Sicherungsverzeichnis zu kopieren...

    Meine Frage: Geht das überhaupt und wie kann ich dieses Problem lösen???

    Danke!
    Foxyfox

    :)
     
    foxyfox2000, 2. Februar 2005
    #1
  2. ThorstenS, 4. Februar 2005
    #2
  3. Datenbank-Backup aus VBA

    Hi Thorsten ,

    vielen Dank für Deine Antwort! Habe zunächst mal Deinen Code probiert, weil er so schön einfach aussieht. Aber wird bei mir der Ausdruck
    "fs.copyfile strdb, str3db" nicht akzeptiert.
    Kann es sein, dass der Ausdruck "scripting.filesystemobject" unter A03 nicht funktioniert?

    foxyfox
     
    foxyfox2000, 5. Februar 2005
    #4
  4. Das Thema "Backup erstellen per VBA" wurde in letzter Zeit recht häufig hier im Forum diskutiert.
    Was mich dabei etwas wundert ist, dass es dabei immer nur um die technische Umsetzung des Datei-Kopierens geht. (Dazu findet man inzwischen haufenweise Code.)
    Die Frage, ob das überhaupt sinnvoll oder erlaubt ist wird praktisch nie behandelt.

    Deshalb muss ich doch mal was grundsätzliches dazu sagen:
    Das Kopieren einer offenen Datenbank ist immer mit dem Risiko verbunden, dass dabei was kaputt geht.
    In der Regel werden das dann Datensätze sein. Da aber auch das VBA-Projekt (Module, Formularcode) in Tabellen gespeichert wird (z.B. MSysAccessObjects), kann auch VBA-Code beschädigt werden.
    Wohlgemerkt: In der angelegten Kopie natürlich. Wenn dieses Backup später mal wiederhergestellt wird, dann kann es eben Fehler haben.

    Um dieses Risiko zu minimieren hier ein paar Tipps...
    Grundsätzlich sollte man nur das verknüpfte Backend kopieren, nicht das Frontend, da dieses nun mal offen ist und Access durch nichts zu bewegen ist, irgendwelche temporären Vorgänge vor dem Schließen auszuführen. (Beispielsweise werden gelöschte Datensätze oder Objekte bis zum Schließen von Access in der Zwischenablage gehalten, um ein UNDO zu ermöglichen. Außerdem bleiben diverse interne Zustands-Flags und Properties gesetzt, und werden erst beim endgültigen Schließen physisch in die MDB geschrieben.)
    - Alle Objekte in der DB sollten zunächst geschlossen sein.
    Das kann z.B. durch folgenden Code erwirkt werden: Code:
    - Auf das Backend sollte zum Zeitpunkt des Kopierens niemand mehr zugreifen. D.h., es darf keine .LDB-Datei zur Backend-MDB existieren und außerdem sollte Exklusiv-Zugriff bestehen: Code:
    ...An die Stelle von "Call CopyBackendToAnyWhere" kann man dann die üblichen Codes zum Kopieren per API oder FileSystemObject setzen.

    Und trotzdem: Sage keiner hinterher, er sei nicht gewarnt worden! *wink.gif*

    Ciao, Sascha
     
    Sascha Trowitzsch, 6. Februar 2005
    #5
  5. Hallo,

    diese Backuplösung hört sich sehr gut an. Wo müssen die einzelnen
    Funktionen und Prozeduren abgelegt werden? Erstelle ich da ein Formuar
    wo alle Dinge reingeschrieben werden?
     
  6. Du legst eine neues Modul an und kopierst da alle vier Prozeduren rein.
    Aufrufen kannst du sie dann aus Formularen, durch Makros, durch Menüpunkte, ... wie dir beliebt.

    Cioa, Sascha
     
    Sascha Trowitzsch, 28. Februar 2005
    #7
  7. Datenbank-Backup aus VBA

    Ich hab jetzt das Modul erstellt. Dann hab ich ein Formular mit folgendem
    Inhalt erstellt:


    PHP:
             Private Sub Form_Load()
    If 
    Me.datum "Montag" And (Me.zeit >= 12 And Me.zeit <= 14Then

    MakeBackup 
    (meineDB)

    End If
    End Sub
     
  8. Der Aufruf aus dem Formular klappt nun. Allerdings kommt immer die Meldung
    dass ich zur Zeit nicht sichern kann. Was wird hier geprüft:


    PHP:
             Function IsBackendReady(sBackendFile As String) As Boolean
    Dim sLDB

    If Len(Dir(sBackendFile)) = 0 Then Exit Function

    'Existenz des zugehörigen LDB-Files ermitteln
    sLDB = Left(sBackendFile, InStrRev(sBackendFile, ".") - 1) & ".LDB"
    If Len(Dir(sLDB)) = 0 Then IsBackendReady = True

    On Error Resume Next
    '
    Zur Sicherheit Möglichkeit des Vollzugriff auf Backend ermitteln
    Open sBackendFile 
    For Binary Access Read Lock Read Write As #1
    If Err.Number <> 0 Then IsBackendReady True
    Close 
    #1

    End Function
     
  9. "meineDB" ist natürlich kein gültiger Zugriffspfad - aber das weißt du sicher selbst *wink.gif*
    Dann meine ich, die Suche nach dem Trennpunkt in "IsBackendReady" evtl. fehleranfällig und würde sicherheitshalber einfach die letzten drei Stellen (mdb) durch ldb ersetzen, also
    sLDB = Left(sBackendFile, len(sBackendFile) - 3) & "LDB"

    Insgesamt finde ich diese Prozedur nicht ganz optimal und würde da noch ein paar zusätzliche Codezeilen investieren, z.B. :
    - Fehlermeldung auswerfen, wenn Backend nicht gefunden wird und
    - Warnung ausgeben wenn "Vollzugriff" nicht möglich
    (btw: wozu ist denn Schreibzugriff erforderlich??)
     
    Anne Berg, 28. Februar 2005
    #10
  10. Was ist denn genau ein gültiger Zugriffspfad?

    c:\verzeichnis\backup ??
     
  11. Zugriffspfad: Der komplette Pfad zur Backend-DB; z.B. "c:\verzeichnisX\backend.mdb"
    @anne: Was soll denn das mit dem Trennpunkt und fehleranfällig ?! Das Backend kann ohne weiteres auch backend.db heißen, wenn du es so gespeichert hast...
    Dass die Routinen noch etwas ausgefeilter in punkto Plausibilitätsprüfungen/Fehlerhandling sein können ist sicher richtig. (Ich würde es so wie gecodet auch nicht einsetzen*wink.gif* )
    Damit ist sichergestellt, dass gerade niemand mehr auf das File zugreift - und das sehe ich als Bedingung für das Backup an.

    Ciao, Sascha
     
    Sascha Trowitzsch, 28. Februar 2005
    #12
  12. Datenbank-Backup aus VBA

    \@Sascha:
    Entschuldige bitte, wenn du dich auf die Füße getreten fühltest, aber es ist doch durchaus möglich und zulässig, Dateinamen mit Punkten zu "verzieren", z.B. "xyz\abc\meineAccess.97.mdb" *biggrin.gif* (wg. 97...)
    Daraus wird dann nach deiner Prozedur "xyz\abc\meineAccess.ldb" - und das bringt dann nicht viel Freude *wink.gif*
     
    Anne Berg, 28. Februar 2005
    #13
  13. \@Anne: Der eingesetze VBA-Befehl heißt InStrRev. Der sucht den Punkt von hinten und die weiteren sind ihm egal und deshalb wird daraus "xyz\abc\meineAccess.97.ldb" *wink.gif*

    Ciao, Sascha
     
    Sascha Trowitzsch, 28. Februar 2005
    #14
  14. \@Sascha: Wie heißt es noch so schön? - Man sieht nur was man sehen will!
    Und InStrRev gibt's natürlich in A97 (noch) nicht - (hihi)...

    Sorry at ALL!! (Vielleicht sollte ich mir mal die Leselupe installieren??)
     
    Anne Berg, 28. Februar 2005
    #15
Thema:

Datenbank-Backup aus VBA

Die Seite wird geladen...
  1. Datenbank-Backup aus VBA - Similar Threads - Datenbank Backup VBA

  2. LostFocus der Datenbank?

    in Microsoft Access Hilfe
    LostFocus der Datenbank?: Moin, gibt es das LostFocus-Event auch für die Datenbank, z.B. wenn man vom Formular zu Minesweeper wechselt? Oder entzieht Windows dem verlassenen Task sämtliche Aufmerksamkeit? Gruß Doming
  3. Problem Datenstruktur Mitglieds-Datenbank

    in Microsoft Access Hilfe
    Problem Datenstruktur Mitglieds-Datenbank: Hallo Leute, Ich habe eine Frage zu einer Vereins-Mitglieder-Datenbank, die ich erstelle. Die Vereinsmitglieder sind in einer Tabelle erfasst, also Nachname, Vorname, usw. Und es gibt einen...
  4. Auslesen Windowsbenutzer in einer Datenbank

    in Microsoft Access Hilfe
    Auslesen Windowsbenutzer in einer Datenbank: Hallo zusammen, wie kann ich auslesen, welcher Windows Benutzer gerade aktuell in einer Datenbank ist? Geht das? Danke Matthias
  5. Datenbank "Ausfahrtenerfassung" Rudern

    in Microsoft Access Hilfe
    Datenbank "Ausfahrtenerfassung" Rudern: Guten Abend zusammen Ich habe mich entschlossen unsere Papierversion der der Ausfahrtenerfassung unseres Ruderclubs zu aktualisieren. Ich habe also zwei neue Tabellen erstellt. T_FAHRTENBUCH und...
  6. Einfache Datenbank zum Suchen und Öffnen von Dokumentdateien

    in Microsoft Access Hilfe
    Einfache Datenbank zum Suchen und Öffnen von Dokumentdateien: Hallo Office-Gemeinde, ich bin komplett neu hier, Newbie im Bereich Access-Datenbanken, und möchte mich an einem kleinen Projekt versuchen - in der Hoffnung, dass das so überhaupt realisierbar...
  7. Datenbank Abfrage - einzelne Datensätze löschen

    in Microsoft Access Hilfe
    Datenbank Abfrage - einzelne Datensätze löschen: Hey ihr Lieben, ich habe eine Abfrage erstellt, die ich dann automatisiert in Excel habe. Nun ist es aber so, dass in dieser Abfrage 2-3 Datensätze enthalten sind, die sich mehr oder weniger...
  8. Backup SQL Server Datenbank VBA

    in Microsoft Access Hilfe
    Backup SQL Server Datenbank VBA: Hallo an alle! Ich bastle gerade an einem Modul für eine Datensicherung für den MS SQL-Server aus einem MS Access Frontend heraus. Irgendwie habe ich einen Knoten, ich schaffe es nicht den String...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden