2012-07-10 292 views
1

在Access/SQL Server組合中使用recordset.findfirst時,是否可以使用多個條件集合?在Access中,您可以rs.findfirst使用多個條件集合

我的代碼工作正常時FindFirst ing "Ref='XYZ'",但只要我做它"Ref='XYZ' AND CustDate=#12-31-2010#"它凍結,我必須EndTask訪問。

這是常見的還是我犯了一個簡單的錯誤。我有兩個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 
+0

這是http://stackoverflow.com/questions/11397943/should-access-recordset-findfirst-have-performance-issues-with-dates的延續,是不是? – Fionnuala 2012-07-10 14:01:47

+0

在純MS Access環境(MS Access + Jet/ACE)中有多個標準是很常見的,但是,我建議您使用WHERE語句,而不是使用SQL Server查找。 – Fionnuala 2012-07-10 14:04:08

+0

這是相關的,但是因爲這個問題集中在表現與日期,我認爲它更好地分開問。我不能使用WHERE,這是一個重複的任務,需要測試[REF]/[DATE]組合的存在性,如果存在,編輯它,如果它不存在,則添加/插入它。 – aSystemOverload 2012-07-10 14:06:20

回答

0

我在MS Access 2007年測試的下方,它關係到在記錄第三記錄。
記錄集中有多少條記錄?您是否使用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 
+0

嗨德克薩斯州。我知道它在Access/Access中工作,就像我開始的那樣,但是當我遷移到Access/SQL Server時,我開始遇到問題。我暫停/突破,並且在rs.findfirst聲明中花了很多時間。如果服務器上的索引只在使用seek時有所幫助,那麼無論如何我可以使用findfirst進行優化,或者我應該使用seek進行查看。我在第一個記錄集中有大約1000條記錄,然後在第二個記錄集中的5000條記錄中查找每條記錄,然後可以添加/更新它。 – aSystemOverload 2012-07-11 07:19:47

+0

我不是在談論數據庫本身,而是代碼。將索引保留在SQL Server中。你如何在SQL Server中創建Access中的記錄集?將代碼發佈爲問題的一部分。 – EastOfJupiter 2012-07-11 11:48:00

+0

我發佈了代碼... – aSystemOverload 2012-07-11 16:44:36

相關問題