Neuigkeiten:

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

Mobiles Hauptmenü

Befehl komplett ausführen, erst danach fortsetzen

Begonnen von jango, April 26, 2011, 18:39:04

⏪ vorheriges - nächstes ⏩

jango

Hola!
Ich hab ein Problem mit meiner DB: in einem Formular gibt werden anhand der darin enthaltenen Daten medizinische Scores berechnet. Die Berechnung erfolgt in einem Modul und zieht die Daten direkt aus der Datenbank. Diese Funktion zur Berechnung (und Speicherung, da die Entwicklung der Scores im Nachhinein nachvollziehbar sein soll) wird u.a. aufgerufen wenn das Formular geschlossen wird. Funktioniert im Prinzip prima, mit einem Problem: beim Schließen des Formulars rufe ich folgenden Code auf:

DoCmd.Save
Scores.calc  '=eben meine Funktion zur Berechnung und speicherung
DoCmd.Close

Das hat zur Folge dass es AB UND ZU wie folgt abläuft: DoCmd.Save wird ausgeführt, danach die calc-Funktion. Allerdings ist zu diesem Zeitpunkt das Speichern noch nicht abgeschlossen, mit dem Resultat dass die Scores nicht korrekt mit den aktuellen Daten berechnet werden(sondern mit den alten).

Bevor jemand vorschlägt die calc-Funktion beim Anzeigen des Formulars auszuführen: Es soll auch einen Button "Scores neu berechnen" im Formular geben, spätestens dann hab ich wieder dasselbe Problem.

Perfekt wäre eine Möglichkeit, zuerst das Speichern zu Ende führen zu lassen und erst danach die calc-Methode auszuführen.

Ich hoffe ich konnte das Problem erklären und freue mich auf Rückmeldung!

lg

Josef P.

Hallo!

Vielleicht speicherst du gar nicht den Datensatz des Formulars sondern die Daten von einem anderen Formular.
Anm.: Beim DoCmd-Zeugs muss man immer aufpassen, auf welches Objekt sie wirken.

Versuche es einmal mit:
ZitatMe.Dirty = false
Scores.calc

mfg
Josef

jango

Hi Josef,

danke, aber ich bin mir ziemlich sicher dass das im Prinzip schon so passt - hab mir das einige male mit dem Debugger angesehen. Es werden also die richtigen Daten gespeichert...

jango

Sorry Josef,
ich habs mir nochmal angesehen, mit Me.Dirty=False vor der calc-Methode klappt es! Vielen Dank!
Kannst du mir (nur aus Interesse) vielleicht erklären warum?! Me.Dirty gibt ja an ob die Daten im Formular geändert wurden, oder? Danke!

Josef P.

Hallo!

Mit Form.Dirty kann auch der Datensatz gespeichert werden, da es auch einen Wert entgegennehmen kann.
Da es auf jeden Fall auf die angegebene Formular-Instanz wirkt, ist es sicherer als Docmd.Save, das auf das gerade aktive Access-Objekt wirkt.

mfg
Josef

jango

Super, weiß bescheid! Vielen Dank für deine Hilfe!