2016-03-31 21 views
0

我有一些代碼從另一個表中獲取值,然後更新表中的值。此代碼位於基於另一個表的記錄集中的每個項目執行的循環中。代碼首次運行,但下一次在第一行發生錯誤,表示由於表被另一用戶或用戶界面持有而導致訪問被拒絕。代碼使用DAO。記錄集關閉後dbDenyWrite仍然有效

任何人都知道爲什麼dbDenyWrite在關閉記錄集並銷燬其引用後仍然有效?

下面的代碼片段:

Set rsRR = DataDB.OpenRecordset("Railroads", dbOpenTable, dbDenyWrite) 
rsRR.Index = "Railroads_RRIx" 
rsRR.Seek "=", RTrs!RR 
If rsRR.NoMatch Then 
    ' Write ERROR MESSAGE 
    rsRR.Close 
    Set rsRR = Nothing 
    GoSub CleanUp 
    ReverseRouteDataCollect = 0 
    Exit Function 
End If 
If Not dWork Is Nothing Then Set dWork = Nothing 
Set dWork = New Scripting.Dictionary 
FieldsSave dWork, rsRR 
i = FieldsCopy(drr, dWork, "TemplatesRailroad") 
If dWork(rsRR.Name & "$LastWaybillNo") = "999999" Then 
    rsRR.Edit 
     rsRR!LastWaybillNo = 2001 
    rsRR.Update 
Else 
    rsRR.Edit 
     rsRR!LastWaybillNo = dWork(rsRR.Name & "$LastWaybillNo") + 1 
    rsRR.Update 
End If 
rsRR.Close 
Set rsRR = Nothing 

回答

0

..爲什麼dbDenyWrite仍處於強制關閉記錄 和破壞其引用後?

因爲你只在NoMatch的情況下這樣做。

因此,要麼改變dbDenyWrite允許編輯,或(慢)開始編輯前重置記錄:

Set rsRR = DataDB.OpenRecordset("Railroads", dbOpenTable)