Ms access 更新事件之前的难题访问VBA
好吧,我有一些有趣的互动正在进行,我想从我的经验丰富的VBA猫那里得到一些建议,帮助我看看是否有一种更优雅的方式来处理我的情况 详情:Ms access 更新事件之前的难题访问VBA,ms-access,vba,Ms Access,Vba,好吧,我有一些有趣的互动正在进行,我想从我的经验丰富的VBA猫那里得到一些建议,帮助我看看是否有一种更优雅的方式来处理我的情况 详情: 在表单上有一个复选框。此复选框已绑定到表 在原始窗体的子窗体上有一个组合框 在主窗体上的beforeupdate事件上,有一个数据验证,用于检查Checkbox=True时combobox不能为null。这是为了防止用户在不执行所需更新的情况下切换记录 所以问题是,我需要能够强制执行数据完整性,同时尽可能不妨碍UI流。值得注意的是,在beforeupdate事件
If Checkbox = True and IsNull(Me!ComboBox) = True Then
lastRecord = Me.CurrentRecord
chkBool = True
end if
以当前事件的形式
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
currRecord=Me.CurrentRecord
如果currRecord lastRecord和chkBool=True,则
DoCmd.GoToRecord acDataForm,“form”,acGoTo,lastRecord
转到当前退出窗体
ElseIf currecord=lastRecord,chkBool=True,则
“做事
vbSql=“更新语句”
DoCmd.runsqlvbsql
chkBool=False
我,刷新一下
如果结束
有没有更好的办法?或者说,我必须以这种方式来处理那些不可靠的工作?遗憾的是,我无法重新设计来规避它,因为子表单需要是一个连续的子表单 首先,您需要正确检查Null:
If Me!Checkbox = True And IsNull(Me!ComboBox) Then
lastRecord = Me.CurrentRecord
chkBool = True
End If
然后与第二段代码一起评估它是如何工作的。您说“在主窗体上的beforeupdate事件上,有一个数据验证,检查Checkbox=True,则combobox不能为null。”一种方法是不要等到主窗体上的beforeupdate事件;选中复选框后立即进行检查。如果组合框为空,则不允许进行检查;首先强制用户进入子窗体。这可能会带来其他问题,但是 是的,我只是发布了psuedo代码供参考。