Access 2016:表单中显示供应商名称而非ID的问题求助
Access表单显示供应商ID而非名称的解决办法
优先方案:用关联查询作为表单记录源(最规范稳定)
这是符合数据库规范化的最优解,你之前尝试过创建查询,但可能没正确关联到表单:
- 创建新查询,添加
T_Database和T_fournisseur两个表,Access会自动根据id_fournisseur建立内连接(如果没自动建立,手动拖曳两个表的id_fournisseur字段建立关联) - 在查询设计视图中,勾选需要显示的字段:
T_Database.numero、T_Database.date、T_Database.region、T_fournisseur.Fournisseurs(以及你需要的其他字段) - 保存这个查询,命名为
Q_Database_Fournisseur - 打开表单
F_infos,在属性窗口中找到记录源,选择刚才创建的Q_Database_Fournisseur - 删除表单中原来绑定
id_fournisseur的控件,添加一个文本框,将其控件来源设置为Fournisseurs字段
排查你之前尝试方法的潜在问题
1. DLookup函数错误
如果id_fournisseur是数字类型,你的DLookup语句多了单引号,会导致类型不匹配,正确写法:
=DLookup("Fournisseurs", "T_fournisseur", "id_fournisseur = " & [id_fournisseur])
如果是文本类型,才需要单引号:
=DLookup("Fournisseurs", "T_fournisseur", "id_fournisseur = '" & [id_fournisseur] & "'")
注意要确保文本框未绑定到id_fournisseur,而是用这个DLookup作为控件来源。
2. 内连接SQL未正确应用
你写的SQL语句是正确的,但需要确保:
- 这个SQL是
F_infos表单的记录源,或者是你创建的查询的SQL - 筛选表单
F_multicriteres的搜索按钮代码中,是基于这个关联查询来筛选,而不是直接筛选T_Database
3. 组合框设置错误
如果用组合框显示供应商名称,需要正确配置:
- 组合框的行来源设为:
SELECT id_fournisseur, Fournisseurs FROM T_fournisseur ORDER BY Fournisseurs - 绑定列设为
1(对应id_fournisseur,用于后台关联) - 列数设为
2 - 列宽设为
0cm;5cm(第一个列宽0隐藏ID,第二个显示名称) - 确保组合框的控件来源绑定到
id_fournisseur字段,这样显示名称但存储ID
4. VBA代码的潜在问题
- 如果
id_fournisseur是文本类型,SQL语句需要加单引号:strSQL = "SELECT Fournisseurs FROM T_fournisseur WHERE id_fournisseur = '" & Me.Controls("id_fournisseur").Value & "'" - 确保
Txt_Fournisseurs是未绑定文本框,不要绑定到任何字段 - 可以在
Form_Load事件中也调用这段代码,确保表单加载时就显示正确名称
补充说明
避免使用Lookup Wizard是正确的,它确实会破坏数据库规范化,导致后续维护困难。优先使用关联查询的方式,既能保证数据一致性,又能稳定显示关联字段。
内容的提问来源于stack exchange,提问作者elizard
相关产品推荐
相关产品推荐

