是否可以绕过BeforeUpdate事件?我在我的BeforeUpdate事件中有一些代码,它在尝试保存记录时运行,但是在同一个表单上我有一个子表单,要求用户在该子表单中选择一个记录。由于这会改变当前记录的焦点,因此会触发我的BeforeUpdate代码,我不希望它这样做。
当用户点击表单子表单中的记录时,有没有办法绕过表单的BeforeUpdate事件?
答案 0 :(得分:2)
“当用户点击表单子表单中的记录时,有没有办法绕过表单的BeforeUpdate事件?”
当您将焦点切换到主窗体中具有未保存记录的子窗体时,Access将自动尝试保存“脏”主窗体记录。
该行为内置于Access中,您无法阻止它。
我认为你应该采用不同的方法。目前(根据评论讨论),您有一个命令按钮来保存主表单记录。但是,如果某些控件包含Null,则从表单的 BeforeUpdate 事件中止保存。
从我的角度来看,当任何控件包含Null时,用户甚至不能单击命令按钮。 (为什么让他们点击一个按钮然后通知他们操作无效?)所以我建议你只在所有控件包含非Null值时启用命令按钮。
考虑名为 cmdSave 的命令按钮和3个文本框: txtOne , txtTwo 和 txtThree 。创建一个过程 SetButtonAvailability ,并在所有3个文本框的 AfterUpdate 事件中调用该过程。
Private Sub SetButtonAvailability
If IsNull(Me.txtOne) Or IsNull(Me.txtTwo) Or IsNull(Me.txtThree) Then
Me.cmdSave.Enabled = False
Else
Me.cmdSave.Enabled = True
End If
End Sub
同样在表单的 OnCurrent 事件中,您将执行Me.cmdSave.Enabled = False
,因为当前记录尚未保存任何更改。