在Access中,您可以使用多个条件来rs.findfirst

时间:2012-07-10 14:00:29

标签: sql-server ms-access vba access-vba

在Access / SQL Server组合中使用recordset.findfirst时,是否可以使用多个条件。

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

这是常见还是我犯了一个简单的错误。我在RefCustID

上都有索引

我的记录集代码是:

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

1 个答案:

答案 0 :(得分:0)

我在MS Access 2007中测试过以下内容,然后转到记录集中的第3条记录 您的记录集中有多少条记录?您是否使用F8完成了代码?当你走过时它会挂在哪里? 此外,您可以执行ALT +暂停中断以打破代码。有时(因为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