Одна вещь, которую я не вижу, это команда ytdRS.Open.Может ли это быть (частью) проблемы?
РЕДАКТИРОВАТЬ: Несколько других вещей:
- Вы не используете одно и то же имя набора записей в этом блоке (ytdRS), поэтому яЯ не уверен, что вы собираетесь использовать два разных набора записей (я предполагаю, что это не так)
- Я не уверен, что «Значение» предназначено для значения поля в наборе записей (т.е.
ytdRS!FieldName.Value
) или имя переменной.В этом контексте это имя переменной. - В любом случае вы почти гарантируете, что попадете в бесконечный цикл, указав свой MoveNext в операторе
if
, поскольку ваш набор записей не будет перемещаться.к следующей записи, если Value
не равен 1. - Мне пришлось изменить CursorType и LockType, чтобы ваш пример работал на тестовой таблице.Я не думаю, что adOpenStatic позволит вам удалять записи (я считаю, что это дает вам статический или неизменный курсор). adOpenKeyset обычно кажется подходящим способом, когда вы сталкиваетесь с проблемами при обновлении данных.AdLockBatchOptimistic, который вы использовали для блокировки, предполагает, что вы работаете в пакетном режиме;нормально adLockOptimistic работает нормально.См. здесь для получения дополнительной информации о методе удаления и пакетной операции, если вам это необходимо.
Код ниже работал для меня;вам придется отредактировать его для вашего конкретного приложенияВ частности, вам нужно отредактировать ytdRS.Source
, ActiveConnection:=
в методе Open()
и строку ytdRs![Order ID].Value = 36
, чтобы они соответствовали вашему выражению "Value" в блоке кода, который вы опубликовали.
Надеюсь, это поможет!
Пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы.
Sub testme()
Dim ytdRs As ADODB.Recordset
Set ytdRs = New ADODB.Recordset
ytdRs.Source = "SELECT * FROM [Order Summary 2]"
ytdRs.CursorType = adOpenKeyset
ytdRs.LockType = adLockOptimistic
ytdRs.Open ActiveConnection:=CurrentProject.Connection
ytdRs.MoveFirst
Do Until ytdRs.EOF
If (ytdRs![Order ID].Value = 36) Then
ytdRs.Delete
End If
ytdRs.MoveNext
Loop
End Sub