之前更新事件难题访问VBA

问题描述:

好吧我有一些有趣的互动正在进行,我想从我的经验丰富的VBA猫的一些建议,以帮助我看看是否有一种更优雅的方式来处理我的情况。之前更新事件难题访问VBA

详情:

  1. 有一个表单上的复选框。该复选框被绑定到一个表格。
  2. 在原始窗体上的子窗体上有一个组合框。
  3. 在主窗体上的beforeupdate事件中,有数据验证检查Checkbox是否为True,然后组合框不能为null。这旨在防止用户切换记录而不执行所需的更新。

所以问题是,我需要能够强制执行数据完整性以及尽可能不妨碍UI流。值得注意的是,在beforeupdate事件中我不能使用Cancel = True,因为当你尝试将焦点切换到子表单时,beforeupdate事件触发,这显然会在UI Flow中创建一个INF锁定。另一个问题是更新事件触发后,复选框值被写入表中。取消选中复选框最终会创建另一个排序循环。

我到目前为止的解决方案:

在之前更新事件

If Checkbox = True and IsNull(Me!ComboBox) = True Then 
    lastRecord = Me.CurrentRecord 
    chkBool = True 
end if 

在Form_Current事件

currRecord = Me.CurrentRecord 

If currRecord <> lastRecord And chkBool = True Then 
    DoCmd.GoToRecord acDataForm, "form", acGoTo, lastRecord 
    GoTo Exit_Form_Current 
ElseIf currRecord = lastRecord And chkBool = True Then 
    'do stuff 
    vbSql = "Update Statement" 
    DoCmd.RunSQL vbSql 
    chkBool = False 
    Me.Refresh 
End If 

有没有更好的方式来处理呢?或者,我是如何处理好这种工作的呢?可悲的是我不能重新设计,以避免它由于子表单需要是一个连续的子表单。

首先,你需要检查正确:

If Me!Checkbox = True And IsNull(Me!ComboBox) Then 
    lastRecord = Me.CurrentRecord 
    chkBool = True 
End If 

然后评估如何与第二一段代码一起工作。

+0

嗯,我没有我只是张贴psuedo代码以供参考。 –

你说:“在主窗体上的beforeupdate事件中,有数据验证检查Checkbox是否为True,然后组合框不能为null。”一种方法是不要等到主窗体上的beforeupdate事件;检查复选框后立即进行检查。如果组合框为空,则不允许检查发生;首先强制用户进入子窗体。这可能会带来其他问题,但...