Hallo,
ich möchte die Möglichkeit einrichten, aus Access heraus eine Sicherheitskopie des Backends in einem bestimmten Verzeichnis zu erzeugen. Dazu gibt es in dem einen Formular "Stammdaten", das dann geöffnet ist, einen Button, der dieses offene Formular schließt und ein Formular öffnet, das keine Verbindung zu einer Tabelle hat und lediglich als "Pausenzeichen" dienen soll. In dessen Currentereignis steht folgender Code:
Dim Quelle As String, Ziel As String, Benutzer As String, BenID As Integer, Timestamp As String, ln As Integer
Dim Start As Double
Start = Timer
Do While Timer < Start + 5
DoEvents
Loop
BenID = DLookup("Benutzer", "Standardwerte")
Benutzer = DLookup("MA", "MA", "MAID = " & BenID)
Timestamp = Now(): ln = Len(Timestamp) - 3
Timestamp = Replace(Timestamp, ".", " ")
Timestamp = Replace(Timestamp, ":", " ")
Timestamp = Left(Timestamp, ln)
Quelle = DLookup("DbPfad", "Standardwerte") & "\ZentralBE.mdb"
Ziel = DLookup("Bckpfad", "Standardwerte") & "\" & Benutzer & " " & Timestamp & ".mdb"
FileCopy Quelle, Ziel
DoCmd.Close , "BckWait"
DoCmd.Quit
Ich bekomme aber stets die Meldung "Zugriff verweigert", und das, bevor das Pausen-Formular (BckWait) überhaupt zu sehen ist. Wenn ich das Formular "Stammdaten" manuell schließe, kann ich ohne Probleme eine Kopie des Backend ziehen. Wo liegt mein Denkfehler?
Hallo,
poste mal den kompletten Code dieses "Warte-Form"- Klassenmoduls....
Setze auch erst mal einen Haltepunkt an den Anfang der Form_Current-Prozedur und prüfe, ob der Code ausgeführt wird und an welchem Statement die Fehlerursache liegt.
Das ist der komplette Code. Gelb markiert ist die "Filecopy"-Zeile.
Ich sollte noch hinzufügen, dass die Variablen Quelle und Ziel beim Debuggen das enthalten, was gewünscht ist. Es scheint, dass Access der Meinung ist, die Tabellen im Backend seien noch geöffnet.
Hallo,
will ja nicht Prinzipien reiten: Aber das ist nicht der komplette Code, es fehlt mindestens das Prozedurgerüst und der Modulkopf 8)
Aber nach der Bestimmumg der fehlerproduzierenden Codezeile ist das jetzt unwichtig.
Sehr wahrscheinlich ist das BE noch mit irgendeinem Zugriff geöffnet. Möglicherweise ist das erste Formular noch nicht "fertig" mit dem Schließprozess, so dass die Tabellenbindung sich noch auswirkt, oder ein anderer Zugriff ist noch aktiv...
Probier es mal mit diesem Code:
http://www.dbwiki.net/wiki/VBA_Tipp:_Dateien_kopieren
Hallo Franz,
danke für den Tip, jetzt wird erfolgreich gesichert! Trotzdem noch mal die Frage: wie kann es sein, dass der Code im Current-Ereignis (deutsch: bei Anzeige) ausgeführt wird, ohne dass das Formular überhaupt angezeigt wird? Das wird es jetzt übrigens auch nicht (ich bestehe nicht auf dem Pausen-Formular, aber ich möchte das verstehen und lernen).
Hallo,
vielleicht wird das Form mit WindowMode-Parameter "acHidden" geöffnet ..?
Nein, es wird normal geöffnet. Ich habe aber jetzt den Close-Befehl in ein Timer-Ereignis gepackt, das Formular ist jetzt zu sehen und wird nach ein paar Sekunden geschlossen. Na ja, manche Dinge muss man einfach hinnehmen ....
Hallo,
naja, dann läuft der Code einfach zu schnell ab und das Form wird geschlossen, bevor Windows (?) überhaupt Zeit findet, die Formular-Objekte aufzubauen.
Filecopy läuft asyschron ab, insofern "wartet" der Codeablauf bei diesem Statement nicht, bis die Datei kopiert ist... Da müßte man sich anders behelfen, z. B. in einer Schleife mit VBA-Open nachsehen, ob , bzw. wann die kopierte Datei wieder frei für einen andern Zugriff ist.