Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Andreas Irmer am März 13, 2023, 20:53:08

Titel: Verändern von Datensätzen in einem Ufo - mit Msgbox entscheiden
Beitrag von: Andreas Irmer am März 13, 2023, 20:53:08
Hallo zusammen,
im Unterformular speichere ich Daten zu Montageeinsätzen ab. Manchmal ist es erforderlich dort Daten zu ändern, wenn sich z.B. der Umfang des Auftrags geändert hat.
Der Mitarbeiter, der den Auftrag ausführen soll, ist aber eine Kerninfo und soll nicht ohne weiteres geändert werden. Dazu bringe ich eine MsgBox, wenn ein anderer Mitarbieter ausgewählt wird. Die MsgBox kann mit ja oder nein beantwortet werden. Bei ja, soll der neue Name übernommen werden, bei nein soll der alte Name im Datensetz stehen bleiben.
Ich habe das bisher so gemacht:
Private Sub Mitarbeiter_ID_F_Dirty(Cancel As Integer)
    Dim Entscheidung As Integer
    If Not IsNull(Me.GeaendertAm) Then
        Entscheidung = MsgBox("Bitte nur Änderungen an Mitarbeitereinsätzen ausführen, die in info@autarker.de gespeichert werden. Ansonsten werden die Termine in falschen Kalendern erscheinen. Wirklich fortfahren?", vbYesNo + vbExclamation, "Bitte beachten")
        If Entscheidung = 6 Then
            Me.GeaendertAm = Now()
        Else
            Me.Undo
        End If
    End If
End Sub

Leider funktionert aber das me.undo nicht und der neue Eintrag bleibt darin stehen. Liegt es an der Konstellation eines Ufos im Hafo?

Wo mache ich den Denkfehler?
Titel: Re: Verändern von Datensätzen in einem Ufo - mit Msgbox entscheiden
Beitrag von: andyfau am März 13, 2023, 21:46:44
Hallo,

versuche es mal im _BeforeUpdate Ereignis und dann anstatt von Me.Undo mit Cancel = True

Beste Grüße
Andreas
Titel: Re: Verändern von Datensätzen in einem Ufo - mit Msgbox entscheiden
Beitrag von: Andreas Irmer am März 13, 2023, 22:19:10
Hallo Namensvetter,

ich habe das jetzt mal eingetragen aber es funktioniert so noch nicht.

Wenn ich mir den Code ansehe,

Private Sub Mitarbeiter_ID_F_BeforeUpdate(Cancel As Integer)
    Dim Entscheidung As Integer
    If Not IsNull(Me.GeaendertAm) Then
        Entscheidung = MsgBox("Bitte nur Änderungen an Mitarbeitereinsätzen ausführen, die in info@autarker.de gespeichert werden. Ansonsten werden die Termine in falschen Kalendern erscheinen. Wirklich fortfahren?", vbYesNo + vbExclamation, "Bitte beachten")
        If Entscheidung = 6 Then
            Me.GeaendertAm = Now()
        Else
            Cancel = True
        End If
    End If
End Sub

ist Cancel aber auch integer und nicht boolean. Kann es daran liegen?

Wenn ich "alles aktualisieren" klicke, bekomme ich die gleiche Msg-Box noch mal. Wenn ich dann wieder auf nein klicke ist der ursprüngliche Zustand, also der alte Name, wieder im Termin drin.

Das gleiche Verhalten tritt auch auf, wenn ich Cancel = True durch Cancel = 1 ersetze.

Hast Du noch Tipps? Oder sonst jemand?
Titel: Re: Verändern von Datensätzen in einem Ufo - mit Msgbox entscheiden
Beitrag von: ebs17 am März 13, 2023, 23:02:57
Ein Speichern findet pro Datensatz statt, nicht bei Einzel-Steuerelementen. Das relevante Ereignis zum unmittelbaren Prüfen vor dem Speichern ist daher das Form_BeforeUpdate.
Davor könnte der Inhalt des Steuerelementes doch zehnmal hin- und hergewechselt werden, was egal ist und nur die Ansicht stört.

Siehe auch beim Klassiker: Rückfrage vor dem Speichern (https://www.donkarl.com?FAQ4.32)