Удаление записей с помощью метода Delete
Использование метода delete помечает текущую запись или группу записей в объекте набора записей для удаления. Если объект Recordset не разрешает удаление записей, возникает ошибка. Если вы находитесь в режиме немедленного обновления, удаление происходит в базе данных немедленно. Если запись не может быть успешно удалена (из-за нарушений целостности базы данных, например), запись останется в режиме редактирования после вызова Update. Это означает, что необходимо отменить обновление с помощью CancelUpdate перед переходом от текущей записи (например, при использовании Close, Moveили NextRecordset).
Если вы находитесь в режиме пакетного обновления, записи помечены для удаления из кэша и фактическое удаление происходит при вызове метода UpdateBatch. (Чтобы просмотреть удаленные записи, после вызова Delete задайте для свойства фильтра значение adFilterAffectedRecords.)
При попытке получить значения полей из удаленной записи возникает ошибка. После удаления текущей записи удаленная запись остается текущей, пока не перейдете к другой записи. После перехода от удаленной записи он больше недоступен.
При вложенных операциях удаления в транзакции можно восстановить удаленные записи, используя метод RollbackTrans. Если вы находитесь в режиме пакетного обновления, можно отменить ожидающее удаление или группу ожидающих удалений с помощью метода CancelBatch.
Если попытка удалить записи завершается ошибкой из-за конфликта с базовыми данными (например, запись уже удалена другим пользователем), поставщик возвращает предупреждения в коллекцию ошибки, но не останавливает выполнение программы. Ошибка во время выполнения возникает только в случае конфликтов во всех запрошенных записях.
Если задано динамическое свойство Unique Table, а набора записей является результатом выполнения операции JOIN в нескольких таблицах, метод Delete удаляет строки только из таблицы, именуемой в свойстве Unique Table.
Метод Delete принимает необязательный аргумент, позволяющий указать, какие записи влияют на операцию Delete. Единственными допустимыми значениями этого аргумента является одна из следующих перечислимых констант ADO AffectEnum:
adAffectCurrent Влияет только на текущую запись.
adAffectGroup Влияет только на записи, удовлетворяющие текущему значению свойства фильтра. Свойство фильтра должно иметь значение FilterGroupEnum или массив закладки, чтобы использовать этот параметр.
В следующем коде показан пример указания adAffectGroup при вызове метода Delete. В этом примере добавляются записи в пример набор записей и обновляется база данных. Затем он фильтрует набор записей с помощью перечисленной константы adFilterAffectedRecords, которая оставляет только добавленные записи видимыми в наборе записей . Наконец, вызывает метод Delete и указывает, что все записи, удовлетворяющие текущему параметру свойства Filter (новые записи), должны быть удалены.
'BeginDeleteGroup
'add some bogus records
With objRs
For i = 0 To 8
.AddNew
.Fields("CompanyName") = "Shipper Number " & i + 1
.Fields("Phone") = "(425) 555-000" & (i + 1)
.Update
Next i
' update
.UpdateBatch
'filter on newly added records
.Filter = adFilterAffectedRecords
Debug.Print "Deleting the " & .RecordCount & _
" records you just added."
'delete the newly added bogus records
.Delete adAffectGroup
.Filter = adFilterNone
Debug.Print .RecordCount & " records remain."
End With
'EndDeleteGroup