MS Access 2010:在移动到子窗体时阻止在主窗体中保存

时间:2015-04-20 23:00:35

标签: vba ms-access events

绑定的主窗体有一些子窗体,允许用户选择在主窗体的相关字段中为它们输入的数据。

但是,当焦点转移到子窗体或返回到主窗体时,主窗体的“更新前后”事件将触发。这是一个问题,因为BeforeUpdate具有验证代码以检查是否已输入必填字段。此时,用户仍在选择'来自子表单的数据进入主表单的记录,因此尝试验证它还为时过早。

有没有办法阻止主窗体尝试保存?

2 个答案:

答案 0 :(得分:1)

它在ACCESS中是一个棘手的部分。 一般来说,如果您离开脏表单,将提交所有未提交的更改(有界形式)。但在此之前,forms_OnbeforeUpdate事件将触发。在您的情况下,一种方法是放置命令按钮并仅通过命令按钮保存它。或者在onBeforeUpdate事件中使用任何验证检查。

想法是使用onBeforeUpdate_event来检查保存是有意还是自动。您可以执行以下检查:

  • 如果您的验证失败,请不要保存(取消= true)
  • 如果通过查看任何变量来保存是有意的。

插入一个命令按钮和一个名为

的表单级/友好变量
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

答案 1 :(得分:0)

没有。这是设计的。

您可以禁用 - 甚至隐藏 - 子表单,直到在父表单中输入和验证了足够的信息。