Vba 如何在MS Access中放弃应用程序退出时的表单内容?

Vba 如何在MS Access中放弃应用程序退出时的表单内容?,vba,ms-access,Vba,Ms Access,当用户退出应用程序时,如何丢弃表单的内容?如果用户通过按钮关闭表单(例如返回主表单),则可通过Me.Undo实现。但如果他关闭了整个应用程序,则当前内容将被输入到相应的表中,这与预期不符。 我还尝试了关闭时的和卸载时的事件,这两个事件在应用程序关闭时都不会触发 编辑:关闭时的事件显示奇怪的行为。正在执行MsgBox,但Me.Undo不知何故无法工作。(当单击X退出应用程序时,可能是在事件发生之前将表单内容输入到表中?关闭表单会自动触发保存绑定控件值的挂起更改。无法从窗体卸载或关闭事件截获该保存操

当用户退出应用程序时,如何丢弃表单的内容?如果用户通过按钮关闭表单(例如返回主表单),则可通过
Me.Undo
实现。但如果他关闭了整个应用程序,则当前内容将被输入到相应的表中,这与预期不符。
我还尝试了关闭时的
和卸载时的
事件,这两个事件在应用程序关闭时都不会触发


编辑:关闭时的
事件显示奇怪的行为。正在执行
MsgBox
,但
Me.Undo
不知何故无法工作。(当单击X退出应用程序时,可能是在事件发生之前将表单内容输入到表中?

关闭表单会自动触发保存绑定控件值的挂起更改。无法从窗体卸载或关闭事件截获该保存操作。我能找到的截取它的唯一方法是从表单的“更新前”和“插入”事件:

Dim SaveFlag As Boolean

Private Sub Form_BeforeUpdate(Cancel As Integer)
    If Me.Dirty = True And SaveFlag = False Then
        Me.Undo
    End If
End Sub
在插入之前,您需要执行类似的操作。您需要以某种方式管理
SaveFlag
,以便在需要保存更改时实际保存更改

Private Sub cmdSave_Click()
    SaveFlag = True
    Me.Dirty = False
    SaveFlag = False
End Sub
但是,如果您想要Access的默认行为,例如在记录之间导航或在主窗体和子窗体之间切换焦点时自动保存更改,则此方法不适用


如果您非常需要此功能,则可以切换到未绑定的数据控件,并仅在显式命令时保存其值。但这会增加很多额外的工作,我不知道这是否值得。我很想把这看作是一个用户教育问题。“请注意,如果关闭应用程序时表单中有未保存的更改,则这些更改将为您保存。”

关闭表单会自动触发保存绑定控件值的挂起更改。无法从窗体卸载或关闭事件截获该保存操作。我能找到的截取它的唯一方法是从表单的“更新前”和“插入”事件:

Dim SaveFlag As Boolean

Private Sub Form_BeforeUpdate(Cancel As Integer)
    If Me.Dirty = True And SaveFlag = False Then
        Me.Undo
    End If
End Sub
在插入之前,您需要执行类似的操作。您需要以某种方式管理
SaveFlag
,以便在需要保存更改时实际保存更改

Private Sub cmdSave_Click()
    SaveFlag = True
    Me.Dirty = False
    SaveFlag = False
End Sub
但是,如果您想要Access的默认行为,例如在记录之间导航或在主窗体和子窗体之间切换焦点时自动保存更改,则此方法不适用


如果您非常需要此功能,则可以切换到未绑定的数据控件,并仅在显式命令时保存其值。但这会增加很多额外的工作,我不知道这是否值得。我很想把这看作是一个用户教育问题。“请注意,如果您在表单中使用未保存的更改关闭应用程序,更改将为您保存。”

我想我必须编写一些用户说明:)我想我必须编写一些用户说明:)