Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Paddy24 am März 01, 2021, 09:06:03

Titel: Me.Dirty = False -> Laufzeitfehler 3270
Beitrag von: Paddy24 am März 01, 2021, 09:06:03
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
Titel: Re: Me.Dirty = False -> Laufzeitfehler 3270
Beitrag von: DF6GL am März 01, 2021, 09:31:58
Hallo,


Wird gerade ein neuer DS bearbeitet?

Was passiert, wenn  Me.AllowAdditions  auskommentiert wird?


Titel: Re: Me.Dirty = False -> Laufzeitfehler 3270
Beitrag von: ebs17 am März 01, 2021, 09:45:53
Die beiden Prozeduren widersprechen sich inhaltlich. Vor Gedanken an Codes würde ich erst einmal solche über Abläufe anregen.
Titel: Re: Me.Dirty = False -> Laufzeitfehler 3270
Beitrag von: Paddy24 am März 01, 2021, 09:56:48
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
Titel: Re: Me.Dirty = False -> Laufzeitfehler 3270
Beitrag von: DF6GL am März 01, 2021, 10:35:34
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
.
Titel: Re: Me.Dirty = False -> Laufzeitfehler 3270
Beitrag von: Paddy24 am März 01, 2021, 11:26:58
Danke, so funktioniert es.
Titel: Re: Me.Dirty = False -> Laufzeitfehler 3270
Beitrag von: ebs17 am März 01, 2021, 13:31:37
Eher:
If Me.Dirty Then Me.Dirty = FalseErst prüfen, dann handeln. Ist besser als Fehler erzeugen und ignorieren.
Titel: Re: Me.Dirty = False -> Laufzeitfehler 3270
Beitrag von: DF6GL am März 01, 2021, 16:33:03
Hallo,

@Eberhard:


funktioniert das wirklich? 

Im Beispiel wird auch hierbei Dirty= False gesetzt, ob nun eine Bedingung benutzt wird oder nicht... ?
Titel: Re: Me.Dirty = False -> Laufzeitfehler 3270
Beitrag von: ebs17 am März 01, 2021, 18:09:43
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.
Titel: Re: Me.Dirty = False -> Laufzeitfehler 3270
Beitrag von: DF6GL am März 02, 2021, 10:42:31
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)
Titel: Re: Me.Dirty = False -> Laufzeitfehler 3270
Beitrag von: ebs17 am März 02, 2021, 13:10:31
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 ...?