OpenRecordSet的数据类型不匹配错误

时间:2011-04-20 01:46:04

标签: sql vba access-vba

使用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。那么为什么会出现类型不匹配?

2 个答案:

答案 0 :(得分:1)

我很长一段时间没有使用过Access,但我认为问题是因为你在SQL中用单引号括起ValueValue2语句,而不是括在括号中的WHERE子句中的字段。

试试这样:

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

答案 1 :(得分:0)

如果引用库中同时包含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