MS-Access中标准表达式中的数据类型不匹配

时间:2016-08-19 18:09:33

标签: sql vba excel-vba ms-access excel

我正在使用Excel-VBA将数据插入表中。我有一个.csv文件被解析并用于创建插入字符串。我在连续多个表上使用它。第一个表处理正常,但第二个表给出了一个错误:

运行时错误'-2147217913(8004e07)': 标准表达式中的数据类型不匹配。

在对此进行研究后,似乎我试图以错误的形式传递数据,但我没有看到第一个表处理的位置或方式。失败的最终插入字符串如下所示:

INSERT INTO Table_Name VALUES ('Text_entry', 'Long_Integer_entry', 'Double_entry', '')

修改 我只是尝试了另一个测试并发现了问题:任何传递null'的Double或Single Integer字段都会导致错误。如何将空值传递给这些数据类型?

1 个答案:

答案 0 :(得分:1)

在SQL中,您可以在任何数据类型列中追加和更新NULL,包括字符串,数字或日期时间值。所以只需在你的追加查询中传递它。请务必不要引用它,因为它既不是字符串也不是数字值。 NULL实体意味着未知值。

INSERT INTO Table_Name VALUES ('Text_entry', 'Long_Integer_entry', 'Double_entry', NULL)

具体来说,您尝试的''实际上是一个零长度字符串(非NULL值),这就是它无法在数字列中工作的原因。

如果您使用参数化查询,还要传递VBA的Null以绑定到SQL语句:

strSQL = "INSERT INTO Table_Name VALUES (?, ?, ?, ?)"

Set cmd = New ADODB.Command

With cmd
     .ActiveConnection = conn
     .CommandText = strSQL
     .CommandType = adCmdText
     .CommandTimeout = 15
End With

' BINDING PARAMETERS
cmd.Parameters.Append _
      cmd.CreateParameter("textparam", adVarChar, adParamInput, 255, "Text_entry")
cmd.Parameters.Append _
      cmd.CreateParameter("longtxtparam", adVarChar, adParamInput, 255, "Long_Integer_entry")
cmd.Parameters.Append _
      cmd.CreateParameter("doubleparam", adDouble, adParamInput, , "Double_entry")
cmd.Parameters.Append _
      cmd.CreateParameter("nullparam", adDouble, adParamInput, , Null)