2016-03-31 13 views
0

Ich habe einige Code, der einen Wert aus einer anderen Tabelle erhält, aktualisiert dann den Wert in der Tabelle. Dieser Code befindet sich in einer Schleife, die für jedes Element in Re-Cord-Set basierend auf einer anderen Tabelle ausführt. Der Code funktioniert beim ersten Mal, aber beim nächsten Mal, wenn in der ersten Zeile ein Fehler auftritt, wird der Zugriff verweigert, weil die Tabelle von einem anderen Benutzer oder der Benutzerschnittstelle gehalten wird. Der Code verwendet DAO.dbDenyWrite immer noch in Kraft, nachdem das Recordset geschlossen

Jeder hat eine Ahnung, warum das dbDenyWrite immer noch in Kraft ist, nachdem das Recordset geschlossen und seine Referenz zerstört wurde?

ist hier ein Code-Schnipsel:

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 

Antwort

0

.. warum die dbDenyWrite noch in Kraft ist das Re-Cord und zerstören seine Referenz nach dem Schließen?

Weil Sie dies nur im Falle eines NoMatch tun.

Also entweder die dbDenyWrite ändern für Änderungen zu ermöglichen, oder (langsamer) setzen Sie das Re-Cord, bevor es Bearbeitung:

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