You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

组合框从查询获取数据时显示错误列/值的问题排查

解决组合框从查询加载显示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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 23:12:15