Hallo,
über einen Button wollte ich das BeforeUpdate Event auslösen, indem ich Me.Dirty = False setze.
in dem BeforeUpdate wird dann geprüft ob die eingegeben Daten stimmen und ob wirklich gespeichert werden soll.
Sage ich in der Msgbox nun "Nein", dann schmeißt er mir den "Laufzeitfehler 3270: Eigenschaft nicht gefunden" und verweist auf die Zeile mit dem Me.Dirty = False. Ich verstehe den Fehler in diesem Zusammenhang nur nicht. Google hatte ähnliche Fälle, aber nichts was mich in die Richtung der Lösung führt.
Anbei noch die beiden Prozeduren:
Private Sub cmdStatusSpeichern_Click()
Me.Dirty = False
End Sub
Private Sub Form_BeforeUpdate(Cancel As Integer)
' Prüfen ob das Bis-Datum kleiner ist als das Von-Datum, ansonsten Meldung geben.
If Me.pszeit_bis < Me.pszeit_von Then
MsgBox "Das Bis-Datum kann nicht kleiner sein als das Von-Datum!", vbOKOnly, "Warnung"
Me.pszeit_bis.SetFocus
Cancel = True
Else
If MsgBox("Änderungen am Status speichern?", vbYesNo, "Speichern?") = vbNo Then
Me.Undo 'rückgängig
Me.AllowAdditions = False
Me.cmdNeuerStatus.Enabled = True
Me.cmdNeuerStatus.SetFocus
Me.cmdStatusAbbrechen.Visible = False
Me.cmdStatusSpeichern.Visible = False
Cancel = True 'Ereignisse verhindern
End If
End If
End Sub
Hallo,
Wird gerade ein neuer DS bearbeitet?
Was passiert, wenn Me.AllowAdditions auskommentiert wird?
Die beiden Prozeduren widersprechen sich inhaltlich. Vor Gedanken an Codes würde ich erst einmal solche über Abläufe anregen.
Ich habe mal das Me.AllowAdditions=False auskommentiert. Jetzt kommt aber ein anderer Laufzeitfehler auf diese Zeile (Me.Dirty=False):
Laufzeitfehler 2101:
Die von Ihnen eingegebene Einstellung ist für diese Eigenschaft ungültig.
Der Ablauf sollte eigentlich korrekt sein, da die Unterform beim öffnen des HFO keine neuen Einträge zulassen soll, außer der User klick expliziert auf den Button "Neuer Eintrag", was das hinzufügen neuer Einträge wieder erlaubt.
Status.JPG
Private Sub cmdNeuerStatus_Click()
Me.AllowAdditions = True
Me.cmdNeuerStatus.Enabled = False
Me.cmdStatusAbbrechen.Visible = True
Me.cmdStatusSpeichern.Visible = True
DoCmd.GoToRecord , , acNewRec
End Sub
Hallo,
es kommt vermutlich die Dirty-Eigenschaft, die gleichzeitig auch eine Methode ist, mit dem Abbruch des Form_BeforeUpdate- Ereignisses in Konflikt.
Soll heißen, wenn das Speichern nicht ausgeführt werden kann, kann Me.Dirty auch nicht zu "False" werden, obwohl es hart so zugewiesen wird.
Quick & Dirty oder ein vernünftiger Error-Handler:
.
On Error Resume Next
Me.Diry = False
.
Danke, so funktioniert es.
Eher:
If Me.Dirty Then Me.Dirty = False
Erst prüfen, dann handeln. Ist besser als Fehler erzeugen und ignorieren.
Hallo,
@Eberhard:
funktioniert das wirklich?
Im Beispiel wird auch hierbei Dirty= False gesetzt, ob nun eine Bedingung benutzt wird oder nicht... ?
Was jetzt "das" genau bedeuten mag?
Ich würde wie oben geschrieben erst einmal klären, ob ich ohne alle Prüfung per Button speichern will und plötzlich beim Form_BeforeUpdate Prüfungen vornehme. Das ist doch Lotto in der praktischen Verwendung.
Unter dem Strich hätte ich eine Prozedur, die meine Ansprüche erfüllt. Die obigen beiden Prozeduren würden nur diese Prozedur aufrufen.
In jedem Fall würde ich bestmöglich auf ein "On Error Resume Next" verzichten wollen, im Sinne einer fehlerfreien Programmierung.
Hallo,
nun, ich meinte mit "
das" dieses: Ob sich mit
ZitatIf Me.Dirty Then Me.Dirty = False
im Gegensatz zu
ZitatMe.Dirty = False
das im Thread angesprochene Problem lösen lässt.
Ansonsten gehe ich natürlich voll mit Dir konform, was die Ablauflogik und die Fehlerbehandlung betrifft.... 8)
Um das so zu beantworten: Eine nicht auffindbare Eigenschaft wird die genannte Prüfung nicht ent- und aufdecken, also hilft sie da nicht. Das vorgegaukelte Speichern findet dann aber so und so nicht statt. Da müsste sich der Entwickler schon stärker dafür interessieren, was er zusammengebaut hat. Ob man die Antwort im Internet findet ...?