Mai 17, 2021, 14:43:38

Neuigkeiten:

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


Me.Dirty = False -> Laufzeitfehler 3270

Begonnen von Paddy24, März 01, 2021, 09:06:03

⏪ vorheriges - nächstes ⏩

Paddy24

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

DF6GL

Hallo,


Wird gerade ein neuer DS bearbeitet?

Was passiert, wenn  Me.AllowAdditions  auskommentiert wird?



ebs17

Die beiden Prozeduren widersprechen sich inhaltlich. Vor Gedanken an Codes würde ich erst einmal solche über Abläufe anregen.
Mit freundlichem Glück Auf!

Eberhard

Paddy24

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.

Sie dürfen in diesem Board keine Dateianhänge sehen.

Private Sub cmdNeuerStatus_Click()

    Me.AllowAdditions = True
    Me.cmdNeuerStatus.Enabled = False
    Me.cmdStatusAbbrechen.Visible = True
    Me.cmdStatusSpeichern.Visible = True
    DoCmd.GoToRecord , , acNewRec

End Sub

DF6GL

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
.

Paddy24


ebs17

Eher:
If Me.Dirty Then Me.Dirty = FalseErst prüfen, dann handeln. Ist besser als Fehler erzeugen und ignorieren.
Mit freundlichem Glück Auf!

Eberhard

DF6GL

Hallo,

@Eberhard:


funktioniert das wirklich? 

Im Beispiel wird auch hierbei Dirty= False gesetzt, ob nun eine Bedingung benutzt wird oder nicht... ?

ebs17

März 01, 2021, 18:09:43 #8 Letzte Bearbeitung: März 02, 2021, 12:56:02 von ebs17
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.
Mit freundlichem Glück Auf!

Eberhard

DF6GL

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)

ebs17

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 ...?
Mit freundlichem Glück Auf!

Eberhard