1

在 Access / SQL Server 组合中使用 recordset.findfirst 时是否可以使用一组以上的条件。

我的代码在 FindFirst-ing 时工作正常 "Ref='XYZ'",但一旦我让它"Ref='XYZ' AND CustDate=#12-31-2010#"冻结,我必须 EndTask Access。

这是常见的还是我犯了一个简单的错误。我对两者都有Ref索引CustID

我的记录集代码是:

dim rsImport as DAO.recordset, rsSQL as DAO.recordset
set rsimport=CurrentDB().OpenRecordset("SELECT * from tblImport",dbopenSnapshot)
 rsimport.movelast
 rsimport.movefirst
set rsSQL=CurrentDB().OpenRecordset("SELECT * from tblRecords",dbOpenDynaset, dbSeeChanges)
 rsSQL.movelast
 rssql.movefirst
do while rsimport.eof=false
   rssql.findfirst "[RefID]='" & rsimport!RefID & "' AND [RefDate]=#" & format(rsimport!CustDate,"m-d-yy") & "#"
   if rssql.nomatch=true then
       debug.print "NOT FOUND - Add..."
   else
       debug.print "FOUND - Update..."
   endif
   rsimport.movenext
loop
4

1 回答 1

0

我在 MS Access 2007 中测试了以下内容,它进入了记录集中的第三条记录。
您的记录集中有多少条记录?您是否使用 F8 单步执行了您的代码?当你通过时它挂在哪里?此外,您可以执行 ALT+Pause Break 来中断代码。有时(因为 MS Access 不是多线程的)处理中断可能需要过多的时间。

...
With rst
    .FindFirst ("field1 = 'xyz' and qty1 = 3")
End With
....

因此,要回答您的问题,是的,可以做到,并且您提供的以下示例应该可以工作:

something.FindFirst ("Ref='XYZ' AND CustID=234")

此外,我相信在记录集上放置索引仅在使用 SEEK 方法时才有用。

编辑——OP现在已经发布了源代码

请尝试以下代码。我将 rsImport 字段分配给变量,并在日期上进行预格式化,以便在比较期间不必进行转换。单步执行代码以查看性能是否有任何改进。我现在无法测试此代码,因此可能需要稍微调整日期变量周围的哈希值,并且 s_RefID 可能不是字符串,因此可能还需要调整数据类型。

我所做的另一个更改是在每次搜索后将 rssql 的位置重置为第一条记录。

dim rsImport as DAO.recordset, rsSQL as DAO.recordset
dim s_RefID as STRING
dim d_RefDate as date
set rsimport=CurrentDB().OpenRecordset("SELECT * from tblImport",dbopenSnapshot)
 rsimport.movelast
 rsimport.movefirst
set rsSQL=CurrentDB().OpenRecordset("SELECT * from tblRecords",dbOpenDynaset, dbSeeChanges)
 rsSQL.movelast
 rssql.movefirst

s_RefID = rsImport!RefID
d_RefDate = #format(rsimport!CustDate,"m-d-yy")#
do while rsimport.eof=false
   rssql.findfirst "[RefID]='" & s_RefID & "' AND [RefDate]=#" & d_RefDate & "#"
   if rssql.nomatch=true then
       debug.print "NOT FOUND - Add..."
   else
       debug.print "FOUND - Update..."
   endif
   rsimport.movenext
   rssql.movefirst

   s_RefID = rsImport!RefID
   d_RefDate = #format(rsimport!CustDate,"m-d-yy")#
loop
于 2012-07-10T16:58:41.760 回答