之前更新事件难题访问VBA
问题描述:
好吧我有一些有趣的互动正在进行,我想从我的经验丰富的VBA猫的一些建议,以帮助我看看是否有一种更优雅的方式来处理我的情况。之前更新事件难题访问VBA
详情:
- 有一个表单上的复选框。该复选框被绑定到一个表格。
- 在原始窗体上的子窗体上有一个组合框。
- 在主窗体上的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
然后评估如何与第二一段代码一起工作。
答
你说:“在主窗体上的beforeupdate事件中,有数据验证检查Checkbox是否为True,然后组合框不能为null。”一种方法是不要等到主窗体上的beforeupdate事件;检查复选框后立即进行检查。如果组合框为空,则不允许检查发生;首先强制用户进入子窗体。这可能会带来其他问题,但...
嗯,我没有我只是张贴psuedo代码以供参考。 –