保存数据至数据库时出现Data type mismatch in criteria错误,寻求排查方案
解决“data type mismatch in criteria”数据类型不匹配错误
这种情况我之前也碰到过几次,虽然你确认了数据类型和数据库定义匹配,但结合移除staff和period字段后代码就能正常运行的现象,问题大概率出在这两个字段的实际赋值逻辑或者表单控件绑定上,而非字段本身的类型定义。给你几个具体的排查方向:
检查字段的实际赋值内容与类型
别只看定义,要确认代码里实际传给数据库的值是什么类型。比如用调试语句输出这两个字段的真实值和类型(以VBA场景为例):Debug.Print "Staff值:" & Me.staff.Value & ",类型:" & TypeName(Me.staff.Value) Debug.Print "Period值:" & Me.period.Value & ",类型:" & TypeName(Me.period.Value)然后对比数据库中这两个字段的类型(比如是
Long整数还是Text文本,是Date日期还是Number数字),很可能是你以为传的是数字,实际传了字符串,或者反过来。排查SQL语句的拼接/参数设置
如果是手动拼接SQL语句,很容易犯类型引号的错误:- 错误示例(staff为数字类型却加了单引号):
"INSERT INTO your_table (staff, period) VALUES ('" & Me.staff & "', '" & Me.period & "')" - 正确示例(数字类型不加单引号,日期类型用#包裹):
"INSERT INTO your_table (staff, period) VALUES (" & Me.staff & ", #" & Me.period & "#)"
如果用的是参数化查询,要确保参数的数据类型和数据库字段严格对应,比如参数类型设为
adInteger对应数据库的Long字段。- 错误示例(staff为数字类型却加了单引号):
检查表单控件的绑定与格式
- 确认
staff和period对应的表单控件,控件来源是不是绑定到了正确的字段?比如本来要绑定员工ID(数字),结果绑定成了员工姓名(文本)。 - 控件的格式设置有没有问题?比如
period是日期类型,但控件格式设为了文本,导致提交的是字符串而非日期值,触发类型不匹配。
- 确认
排查数据库端的隐性约束
- 这两个字段是不是设置了外键关联?比如
staff关联员工表的ID,但你提交的值在员工表里不存在,部分数据库会把这种外键不匹配错误提示为类型不匹配。 - 检查字段的有效性规则,比如
period有日期范围限制,提交的日期不符合规则,也可能触发类似的错误提示。
- 这两个字段是不是设置了外键关联?比如
先从打印实际值和类型开始排查,这一步往往能快速定位到问题所在。
内容的提问来源于stack exchange,提问作者Connor Elliott
相关产品推荐
相关产品推荐

