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 语句中将 Value
和 Value2
括在单引号中,而不是将 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 一起使用