Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Problem mit Backup per VBA - "Zugriff verweigert"

Begonnen von ulli, Juni 22, 2012, 19:32:40

⏪ vorheriges - nächstes ⏩

ulli

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?

DF6GL

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.



ulli

Das ist der komplette Code. Gelb markiert ist die "Filecopy"-Zeile.

ulli

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.

DF6GL

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

ulli

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).

DF6GL

Hallo,

vielleicht wird das Form mit WindowMode-Parameter "acHidden" geöffnet ..?



ulli

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 ....

DF6GL

#8
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.