组合框从查询获取数据时显示错误列/值的问题排查
解决组合框从查询加载显示ID而非姓名的问题
核心原因
你的组合框行来源使用了过滤忙碌人员的查询,当表单存储的人员ID不在该查询结果中时,组合框无法匹配到对应的姓名,只能显示存储的原始ID。
解决方案
1. 行来源用全量人员表,下拉时动态过滤忙碌人员
这种方法既能保证加载时匹配所有已存储ID并显示姓名,又能在下拉时只展示可用人员:
- 先设置组合框的默认行来源为全量人员表:
SELECT 人员ID, 姓名 FROM 人员表 ORDER BY 姓名 - 打开表单的VBA编辑器,给组合框添加
On Dropdown事件代码:Private Sub 组合框名称_DropDown() ' 替换为你的忙碌人员过滤条件,比如排除当前日期忙碌的人员 Me.组合框名称.RowSource = "SELECT 人员ID, 姓名 FROM 人员表 WHERE 人员ID NOT IN (SELECT 人员ID FROM 忙碌表 WHERE 忙碌日期 = Date()) ORDER BY 姓名" End Sub - 给组合框添加
On LostFocus事件,恢复全量行来源,确保后续加载仍能匹配所有ID:Private Sub 组合框名称_LostFocus() Me.组合框名称.RowSource = "SELECT 人员ID, 姓名 FROM 人员表 ORDER BY 姓名" End Sub
2. 修改查询保留所有人员,通过组合框属性过滤下拉项
若不想用VBA,可修改行来源查询包含所有人员,再利用组合框属性过滤下拉内容(Access 2013及以上支持):
- 行来源查询改为:
SELECT 人员ID, 姓名, IIF(人员ID IN (SELECT 人员ID FROM 忙碌表 WHERE 忙碌日期 = Date()), True, False) AS 是否忙碌 FROM 人员表 ORDER BY 姓名 - 设置组合框的
ListFilter属性为是否忙碌 = False,下拉时仅显示非忙碌人员,而行来源仍包含所有人员,加载时可匹配已存储ID显示姓名。
3. 检查组合框基础设置(排除低级错误)
确认以下配置是否正确:
- 绑定列:设为
1(对应行来源的ID列) - 列数:设为
2(ID和姓名两列) - 列宽:设为
0;5(隐藏ID列,仅显示姓名列,单位可按需调整) - LimitToList:设为
Yes,避免输入无效值
内容的提问来源于stack exchange,提问作者I Parker
相关产品推荐
相关产品推荐

