【问题标题】:Data Type Mismatch in Criteria Expression in MS-AccessMS-Access 中条件表达式中的数据类型不匹配
【发布时间】:2016-08-19 18:09:32
【问题描述】:

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

运行时错误“-2147217913 (8004e07)”: 条件表达式中的数据类型不匹配。

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

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

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

【问题讨论】:

  • 你试过用双引号吗? Table_Name 是否需要 Long_Integer_entryDouble_entry 的字符串?如果不是,请删除那里的引号 - 引号用于分隔 String 值,而不是数字。
  • 这是否意味着如果它是一个数字我必须省略各种引号?
  • 我就是这么说的
  • 期待我伪命名传递给它的值的数据类型。我刚刚尝试了另一个测试并发现了问题:任何通过 null '' 的 Double 或 Single Integer 字段都会导致问题。如何将空值传递给这些数据类型?
  • 在插入前更改表格字段以允许空值或将空值设置为零。

标签: sql vba excel ms-access


【解决方案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)

【讨论】:

  • 使用“Null”关键字可以正确处理双精度和长整数,谢谢!将 Null 用于字符串而不是使用零长度字符串是否有缺点?
  • 很高兴听到!存储方面,我不知道它是否有所作为。 NULL 倾向于表示未初始化的值,其中零长度字符串是合法的初始化值。查询会有所不同且不可互换:[str] IS NULL[str] = ''。总而言之,这取决于您的操作,类似于为数字存储 0 或 NULL。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-28
  • 1970-01-01
  • 2014-12-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多