MS Access 2010:防止在移动到子窗体时以主窗体保存
MS Access 2010 : Prevent Save in Main Form On Move to Subform
绑定的主窗体有一些子窗体,允许用户选择数据,然后在主窗体的相关字段中为他们输入。
但是,当焦点转移到子窗体或返回到主窗体时,主窗体的更新前和更新后事件将触发。这是一个问题,因为 BeforeUpdate 有验证代码来检查是否已输入必填字段。此时,用户仍在'selecting' 子表单中的数据输入到主表单的记录中,因此现在尝试验证它还为时过早。
有什么方法可以防止主窗体尝试保存吗?
没有。这是设计使然。
您可以禁用 - 甚至隐藏 - 子表单,直到在父表单中输入并验证了足够的信息。
这是 ACCESS 中的一个棘手部分。
一般来说,如果您离开脏表单,所有未提交的更改都将被提交(有界表单)。但在此之前 forms_OnbeforeUpdate 事件将会触发。在您的情况下,一种方法是放置一个命令按钮并仅通过命令按钮保存它。或者在该 onBeforeUpdate 事件中使用任何验证检查。
想法是使用 onBeforeUpdate_event 检查保存是有意的还是自动的。您可以执行检查:
- 如果您的验证失败,请不要保存(取消 = true)
- 如果通过查看任何变量进行保存是有意的。
插入一个命令按钮和一个名为
的表单 level/friendly 变量
Dim iCanSave as boolean
使用命令按钮将 iCanSave 变量设置为 True
并执行
iCanSave = True
Docmd.runCommand accmdSAveRecord
在您的 Form_onBeforeUpdate 事件中检查 iCanSave 是否为真,如果是,则保存是有意的,因此允许保存.. 如果不是,则丢弃保存。
类似于:
form_onBeforeUpdate(cancel....)
if not (iCanSAve) then
cancel = true
End if
绑定的主窗体有一些子窗体,允许用户选择数据,然后在主窗体的相关字段中为他们输入。
但是,当焦点转移到子窗体或返回到主窗体时,主窗体的更新前和更新后事件将触发。这是一个问题,因为 BeforeUpdate 有验证代码来检查是否已输入必填字段。此时,用户仍在'selecting' 子表单中的数据输入到主表单的记录中,因此现在尝试验证它还为时过早。
有什么方法可以防止主窗体尝试保存吗?
没有。这是设计使然。
您可以禁用 - 甚至隐藏 - 子表单,直到在父表单中输入并验证了足够的信息。
这是 ACCESS 中的一个棘手部分。 一般来说,如果您离开脏表单,所有未提交的更改都将被提交(有界表单)。但在此之前 forms_OnbeforeUpdate 事件将会触发。在您的情况下,一种方法是放置一个命令按钮并仅通过命令按钮保存它。或者在该 onBeforeUpdate 事件中使用任何验证检查。
想法是使用 onBeforeUpdate_event 检查保存是有意的还是自动的。您可以执行检查:
- 如果您的验证失败,请不要保存(取消 = true)
- 如果通过查看任何变量进行保存是有意的。
插入一个命令按钮和一个名为
的表单 level/friendly 变量Dim iCanSave as boolean
使用命令按钮将 iCanSave 变量设置为 True
并执行
iCanSave = True
Docmd.runCommand accmdSAveRecord
在您的 Form_onBeforeUpdate 事件中检查 iCanSave 是否为真,如果是,则保存是有意的,因此允许保存.. 如果不是,则丢弃保存。 类似于:
form_onBeforeUpdate(cancel....)
if not (iCanSAve) then
cancel = true
End if