PDA

Vollständige Version anzeigen : Verwenden von OK/Abbrechen/Übernehmen Schaltflächen in Formularen


JPA
22.04.2013, 13:52
Aufgabenstellung:
Der Wunsch ist die drei klassischen Befehlsschaltflächen OK / Abbrechen / Übernehmen in einem Access-Formular abzubilden mit entsprechenden Funktionalitäten:

OK - Befehlsschaltfläche: Datensatz speichern (wenn nötig) und Fenster schliessen (wenn erfolgreich gespeichert)
Abbrechen - Befehlsschaltfläche: Formular schliessen ohne aktuelle Änderungen im Datensatz zu speichern
Übernehmen - Befehlsschaltfläche: Datensatz speichern und die Übernehmen - Befehlsschaltfläche deaktivieren

Mit richtigen Ereignisprozeduren des Formulars, lassen sich die Anforderungen gut lösen.
Die Prozeduren die sich im Formular frmProdukt in der datei 'SchaltflächenOkAbbrechenÜbernehmen.mdb' befinden, können in jedes Formular übertragen und genutzt werden.
Anpassungen sind nur dann notwendig, wenn bereits die Ereignisprozeduren verwendet worden sind.

Option Compare Database
Option Explicit

Dim SaveWithClose As Boolean

Private Sub cmdOK_Click()
If Me.Dirty Then
SaveWithClose = True
CommandSaveRecord Me
Else
CloseForm Me.Name
End If
End Sub

Private Sub cmdCancel_Click()
If Me.Dirty Then
Beep
If MsgBox("Der Datensatz ist noch nicht gespeichert, die von Ihnen vorgenommenen Änderungen gehen jetzt verloren." & vbNewLine & vbNewLine & "Möchten Sie das Formular trotzdem schließen?", vbYesNo + vbDefaultButton2 + vbExclamation, "Datenspeicherung") = vbNo Then Exit Sub
Me.Undo
End If
CloseForm Me.Name
End Sub

Private Sub cmdApply_Click()
SaveWithClose = False
CommandSaveRecord Me
End Sub

Private Sub Form_Current()
SetControlProperty Me.cmdApply.Properties("Enabled"), False, Me.cmdCancel
SaveWithClose = False 'Nicht wirklich notwendig (aber ... sicher ist sicher :-)
End Sub

Private Sub Form_Dirty(Cancel As Integer)
Me.cmdApply.Enabled = True
End Sub

Private Sub Form_Undo(Cancel As Integer)
SetControlProperty Me.cmdApply.Properties("Enabled"), False, Me.cmdCancel
SaveWithClose = False
End Sub

Private Sub Form_BeforeUpdate(Cancel As Integer)
Me.GeaendertAm = Now()
End Sub

Private Sub Form_AfterUpdate()
SetControlProperty Me.cmdApply.Properties("Enabled"), False, Me.cmdCancel
If SaveWithClose Then CloseForm Me.Name
End Sub

Private Sub Form_Error(DataErr As Integer, Response As Integer)
SaveWithClose = False
End Sub

In der Datei im Anhang ist der Programmcode auch kommentiert.
Gruß
JPA