使用ADO Recordset时的运行时错误3001.Find有多个条件

时间:2017-05-17 19:24:50

标签: vba ms-access access-vba runtime-error

我正在尝试使用recordset.Find "name =" & me.txtbox.value。查找特定记录/行。如果我完全按照上面的搜索只使用1个变量,我可以很容易地做到这一点。

我尝试做了以下操作,因为我发现其他人已在网上完成此操作。 traceRecordset.Find "[PART_ID]=" & Me.txtSection.Value & " AND " & "[ID]= " & Me.txtCopy.Value

这是后面的确切代码行,错误不会抛出此行 Me.txtLastscrap = traceRecordset.Fields("APROPERTY_2")

在填充具有特定值的文本框时,这将为我提供更大的灵活性。似乎其他人没有尝试过这个问题。但是,我收到以下错误。

  

参数类型错误,不可接受   范围或相互冲突

有什么想法吗?

注意:如果我traceRecordset.Find "[PART_ID]=" & Me.txtSection.Value它有效,它也可以与traceRecordset.Find "[ID]= " & Me.txtCopy.Value一起使用,因此它们可以正常运行。只有在一起使用时才会引发错误。如果类型是问题,其中一个在独立使用时不起作用吗?

注意2:这是我的adodb连接线。不确定这是否有任何影响

Dim dbTrace As ADODB.Connection Dim traceRecordset As New ADODB.Recordset

Set dbTrace = CurrentProject.Connection traceRecordset.Open "Select * from TRACE", _ dbTrace, adOpenKeyset, adLockOptimistic, adCmdText

1 个答案:

答案 0 :(得分:2)

根据ADO Recordset.Find documentation

  

在条件中只能指定单列名称。这种方法   不支持多列搜索。

     

...

     

标准:   一个String值,包含一个语句,指定要在搜索中使用的列名,比较运算符和值。

由于您已经在Access项目中编写VBA,因此DAO的工作原理与Access 2016一样,DAO Recordset类型仍然是Forms和QueryDef对象使用的默认类型。 DAO记录集支持FindFirst,FindNext,FindPrevious和FindLast,它们都支持多列查询。这个单一的功能可能无法从ADO切换,但如果您所做的只是打开,搜索和枚举记录集行,ADO不会带来任何重大好处。