Я думаю, что проблема в том, что вам нужно явно использовать курсор на стороне клиента. Я подозреваю, что вы неявно используете серверный курсор.
Я предпочитаю устанавливать свойства объекта набора записей по отдельности, потому что я думаю, что легче читать (и, следовательно, отлаживать), чем использовать перегруженный метод Open
. Кроме того, вы можете использовать свойство RecordCount
для вашего цикла, например
With rs
.ActiveConnection = CurrentProject.Connection
.Source = "dbrammDump"
.CursorLocation = adUseClient ' <<< THIS MISSING FROM ORIGINAL CODE
.CursorType = adOpenKeyset
.LockType = adLockBatchOptimistic
.Open
Dim counter As Long
For counter = 0 To .RecordCount - 1
.Delete
.MoveNext
Next
.UpdateBatch
rowsDel = counter
End With
FWIW Я согласен с другими здесь, что основанное на множестве решение в SQL предпочтительнее процедурного кода, такого как приведенный выше.