如何在MS Access 2010及更高版本中阻止子窗体ComboBox刷新(重查询)
Access 2010+子窗体ComboBox随主记录切换自动刷新的解决方法
该行为是Access 2010及更高版本新增的默认特性,初衷是确保主窗体记录切换时,子窗体的关联绑定控件值始终和当前主记录上下文匹配,所以会默认触发子窗体中控件的数据源刷新操作。你可以通过以下几种方式修改该行为:
- 调整当前数据库全局设置:打开Access「选项」面板,进入「当前数据库」设置页,找到「在窗体和报表中启用关联控件的自动刷新」选项,取消勾选后保存设置,重启数据库即可生效。该配置会对当前库内所有窗体生效。
- 单独修改目标主窗体属性:如果不需要全局修改,可打开主窗体的设计视图,在主窗体属性表的「数据」分类下,找到「关联控件自动刷新」属性,设置为「否」即可,该改动仅作用于当前主窗体,不会影响其他窗体的默认逻辑。
- 代码缓存ComboBox数据源彻底避免重复查询:如果上述配置仍无法满足需求,可将ComboBox的行来源类型改为「值列表」,在窗体加载时一次性执行复杂查询写入值列表,后续切换记录不会再重新执行查询,参考VBA代码如下:
Private Sub Form_Load() Dim rs As Recordset ' 执行一次复杂查询获取结果 Set rs = CurrentDb.OpenRecordset("你的ComboBox底层复杂查询SQL") ' 清空ComboBox原有值 Me.子窗体控件名.Form.ComboBox控件名.RowSource = "" ' 遍历查询结果写入ComboBox值列表 Do While Not rs.EOF Me.子窗体控件名.Form.ComboBox控件名.AddItem rs("显示字段名") & ";" & rs("绑定字段名") rs.MoveNext Loop rs.Close Set rs = Nothing End Sub
如果你的ComboBox需要根据当前主窗体记录做动态过滤,不能关闭自动刷新特性,建议优化底层查询性能:给关联查询字段加索引、将复杂查询的中间结果提前写入临时表预处理,也可大幅降低单次查询耗时。
内容的提问来源于stack exchange,提问作者Predrag Janković
相关产品推荐
相关产品推荐

