导航窗体内嵌套窗体使用ComboBox筛选报表时出现异常是什么原因?
问题原因
这两个问题由同一个Access导航窗体的固有机制导致:
- 嵌套在导航控件中的窗体,只要代码执行了直接操作子报表对象的动作(比如修改筛选条件、启用筛选),都会触发导航控件的焦点重置逻辑,打断当前正在执行的控件更新流程。
- 第一个报错的根源:
AfterUpdate事件触发时你直接操作了子报表的Filter属性,此时ComboBox本次选中的新值还没有完成正式提交,读取Me.comboBox_FilterField拿到的是空值,拼接出的ID =属于语法不完整的筛选条件,直接执行就会抛出语法错误。 - 第二个值滞后的根源:操作子报表的动作打断了ComboBox的更新提交流程,本次选中的值没有被写入控件的Value属性,所以控件存储的始终是上一次成功提交的旧值。
参考解决方法
如果要修复该问题,可调整代码逻辑,先强制提交控件更新再操作子报表,调整后的代码示例:
Private Sub comboBox_FilterField_AfterUpdate() ' 先强制提交当前窗体所有未保存的控件更新 Me.Dirty = False ' 再执行子报表筛选逻辑 Me.subreport_TestReport.Report.Filter = "ID = " & Me.comboBox_FilterField Me.subreport_TestReport.Report.FilterOn = True End Sub
内容的提问来源于stack exchange,提问作者Pangu
相关产品推荐
相关产品推荐

