Access VBA按日期查询报Data Type mismatch in criteria expression错误如何解决
错误原因及修复方案
核心错误点
- 日期值包裹语法错误
你编写的SQL拼接代码中,LaDate的匹配条件写为LaDate = '#" & LaDate & "#'",相当于给日期值同时套了单引号和#符号。Access SQL语法中,日期类型取值仅需用#包裹即可,不需要额外加单引号;加单引号后Access会将该部分识别为字符串,和Date/Time类型的字段匹配时就会触发类型不匹配错误。 - 日期格式兼容性隐患
VBA直接将Date类型变量转为字符串拼接进SQL时,会受系统区域设置影响,生成的月/日/年顺序可能和Access预期不符,也容易触发类型匹配错误。
修复方案
方案1:修正拼接语法
调整SQL拼接逻辑,去掉日期外的单引号,同时格式化日期为通用格式:
sSQL = "SELECT " & FieldSelect & " FROM Test WHERE Match1= '" & VarMatch1 & "' AND LaDate = #" & Format(LaDate, "yyyy-mm-dd") & "#"
方案2(更推荐):使用参数化查询
参数化查询无需处理格式转义、也不会出现类型匹配问题,同时可以避免SQL注入风险:
Dim cmd As New ADODB.Command With cmd .ActiveConnection = ' 此处替换为你当前使用的数据库连接对象 .CommandText = "SELECT " & FieldSelect & " FROM Test WHERE Match1= ? AND LaDate = ?" ' 按顺序添加参数,和上面占位符一一对应 .Parameters.Append .CreateParameter(, adVarChar, adParamInput, 255, VarMatch1) .Parameters.Append .CreateParameter(, adDate, adParamInput, , LaDate) End With Dim rs As ADODB.Recordset Set rs = cmd.Execute ' 执行后直接从rs中获取查询结果
内容的提问来源于stack exchange,提问作者TourEiffel
相关产品推荐
相关产品推荐

