Access VBA:ComboBox获焦点设置RowSource后未填充数据问题
解决Access ComboBox焦点时刷新数据的问题
你的思路方向完全正确——通过ComboBox获得焦点的时机来重新加载数据源,但只设置RowSource还不足以让控件显示最新数据,因为Access不会自动触发列表的刷新动作。你需要在设置完数据源后,调用控件的Requery方法强制它重新查询并加载最新内容。
修正后的VBA代码
'Run when the "name" combobox gains focus Private Sub nameCb_GotFocus() ' 设置数据源查询语句 nameCb.RowSource = "SELECT name FROM t_people" ' 强制控件重新查询并刷新下拉列表 nameCb.Requery End Sub
为什么原代码没有生效?
当你直接修改RowSource属性时,Access只会更新控件的数据源配置,但不会主动重新执行查询并刷新显示内容。Requery方法的作用就是触发控件重新执行指定的查询,把t_people表中name列的最新数据加载到下拉列表里,这样每次ComboBox获得焦点时,用户就能看到最新的名称列表了。
额外优化小建议
- 如果
t_people表的数据量较大,频繁执行Requery可能会有轻微延迟,你可以考虑增加数据更新的判断逻辑(比如记录上次更新时间,仅在数据真的变化时才刷新);但对于普通小型数据表,直接调用Requery完全够用。 - 你也可以把查询语句保存为Access的已命名查询(比如
qry_PeopleNames),然后直接指定查询名作为RowSource,代码会更整洁:nameCb.RowSource = "qry_PeopleNames" nameCb.Requery
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

