为何Access控件源表达式将下拉字段选项识别为数字而非字符串?
MS Access 表单自动生成ID问题解决
问题描述
我正在创建一个MS-Access表单,需要根据数据录入年份加上所选条目类型自动填充ID编号。条目类型选择来自同表单的下拉列表,例如当录入日期为“07-25-2024”且选择条目类型为“food”时,期望自动生成“food-24”。
该“条目类型”下拉字段基于另一张表,表中ID-1对应“food”,ID-2对应“drink”。
我在“ID”字段的控件源框中输入了以下表达式:=[entry type]+Right([Date],2)
但结果并非“food-24”,而是“25”(即所选条目的ID编号1加上年份最后两位24)。请问如何让表达式选取实际的字符串“food”?
核心问题分析
你的问题源于两点:
- 下拉框绑定列设置:当前下拉框绑定的是类型表的ID列(数值型),因此
[entry type]返回的是ID值(如1),而非显示的文本“food”。 - 错误使用
+进行字符串连接:Access中+会优先尝试数值运算,当一侧是数字、另一侧是数字格式的字符串时,会自动转换后相加,导致1+"24"得到25,而非拼接字符串。
解决方法
方法一:修改下拉框绑定列(无需存储类型ID时使用)
- 打开下拉框的属性窗口,确认行来源类似
SELECT ID, TypeName FROM 类型表;(TypeName为存储food/drink的字段名)。 - 设置列数为2,列宽设为
0cm;5cm(隐藏ID列,仅显示文本)。 - 将绑定列改为2(绑定到TypeName列)。
- 更新ID字段的控件源表达式:
注意:建议将=[entry type] & "-" & Right(Year([Date]),2)[Date]替换为表单中日期字段的实际名称,避免与系统内置Date()函数冲突。
方法二:保留ID绑定,用DLookup获取文本(需存储类型ID时使用)
如果必须将类型表的ID存入表单字段,无法修改绑定列,可通过DLookup函数从类型表中匹配对应文本:
更新ID字段的控件源表达式为:
=DLookUp("TypeName","类型表","ID=" & [entry type]) & "-" & Right(Year([Date]),2)
请根据实际情况替换:
TypeName:类型表中存储food/drink的字段名称类型表:你的类型表实际名称[Date]:表单中日期字段的实际名称
内容的提问来源于stack exchange,提问作者Simon-S
相关产品推荐
相关产品推荐

