OpenRecordSet 的数据类型不匹配错误

Posted

技术标签:

【中文标题】OpenRecordSet 的数据类型不匹配错误【英文标题】:data type mismatch error with OpenRecordSet 【发布时间】:2011-04-20 01:46:03 【问题描述】:

使用 Access 2007。我正在尝试编写一个 VBA 函数,该函数将从我作为参数传递的表名、字段和值构造一个查询。我不断收到“运行时错误'3464':标准表达式中的数据类型不匹配。”

代码如下:

Function getPrimaryFromForeign(db As Database, table As String, field As String, _
                            value As Long, _
                            field2 As String, value2 As Long) As Long

Dim sStr As String
Dim istr As String
Dim rs As Recordset



sStr = "select * from " & table & " where " _
        & field & "='" & value & "' and " & field2 & "='" & value2 & "'"
    istr = "insert into " & table & "(" & _
    field & "," & field2 & ") values ('" & value & "','" & value2 & "')"



Set rs = db.OpenRecordset(sStr)

If rs.RecordCount < 1 Then
    db.Execute (istr), dbFailOnError
    Set rs = db.OpenRecordset(sStr)
End If
getPrimaryFromForeign = rs("id")

End Function

错误发生在以下行: 设置 rs = db.OpenRecordset(sStr)

我认为这与Value和Value2的变量类型有关。但是我已经使用 typename() 检查了它们,当调用 OpenRecordSet() 时它们都是 Long。该查询位于一个表中,其中这两个字段的类型均为 Number。那么为什么会出现类型不匹配呢?

【问题讨论】:

【参考方案1】:

我很久没有使用 Access,但我认为问题是因为您在 SQL 语句中将 ValueValue2 括在单引号中,而不是将 WHERE 子句中的字段括在括号中。

试试这样:

sStr = "select * from " & table & " where [" _
            & field & "] = " & value & " and [" & field2 & "] = " & value2
istr = "insert into " & table & "([" & _
            field & "], [" & field2 & "]) values (" & value & "," & value2 & ")"

【讨论】:

我删除了引号,但在同一行仍然出现同样的错误。 @sigil 我更新了我的答案。字段名称中是否有空格?我在这里有点盲目,因为我没有要测试的 Access 实例。 是单引号!我已经从插入语句中删除了它们,但没有从选择中删除。当我从两者中删除它们时,该功能按预期运行。谢谢! @sigil 酷!很高兴我能帮上忙。 请注意,如果字段名称不是合法名称(即包含空格或关键字),则需要括号 ([])。它们是可选的,但不要伤害,否则。【参考方案2】:

如果您的参考库中同时存在 DAO 和 ADO,则可能会发生这种情况。 在这种情况下,您的 Dim 语句和引用窗口中的声明顺序都很重要。

1) "您必须同时引用和使用 DAO 和 ADO Recordset 对象,明确地按如下方式标注对象:

Dim adoRS As ADODB.Recordset
Dim daoRS As DAO.Recordset"

2)“请确保 DAO 对象库的引用在“引用”对话框中具有更高的优先级,或者清除对 Microsoft ActiveX 数据对象的引用。”

请看这里: https://support.microsoft.com/en-us/help/181542/you-receive-a-type-mismatch-error-when-you-run-the-openrecordset-metho

【讨论】:

以上是关于OpenRecordSet 的数据类型不匹配错误的主要内容,如果未能解决你的问题,请参考以下文章

DAO QueryDef 的 OpenRecordset 方法上的数据转换错误 3421

SKlearn SGD Partial Fit 错误:特征数 378 与之前的数据不匹配 4598

VBA OpenRecordset Producing 参数太少。预期 2. 错误

错误 3622 - 访问具有 IDENTITY 列的 SQL Server 表时,必须将 dbSeeChanges 选项与 OpenRecordset 一起使用

ms 访问 2007 更新错误运行时错误 3464,条件表达式中的数据类型不匹配

错误“条件表达式中的数据类型不匹配”