在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
答案 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