Удаление записей с помощью метода Delete
С помощью метода Delete помечает текущую запись или группу записей в объекте Recordset для удаления. Если объект Recordset не разрешает удаление записи, возникает ошибка. Если вы находитесь в режиме немедленного обновления, удаление происходит в базе данных немедленно. Если запись не может быть успешно удалена (например, из-за нарушений целостности базы данных), она останется в режиме редактирования после вызова update. Это означает, что необходимо отменить обновление с помощью CancelUpdate перед удалением текущей записи (например, с помощью команды Close, Move или NextRecordset).
Если вы находитесь в режиме пакетного обновления, записи помечаются для удаления из кэша, а фактическое удаление происходит при вызове метода UpdateBatch . (Чтобы просмотреть удаленные записи, присвойте свойству Filter значение adFilterAffectedRecords после вызова delete .)
Попытка получить значения полей из удаленной записи приводит к ошибке. После удаления текущей записи удаленная запись остается текущей, пока вы не перейдете к другой записи. После удаления удаленной записи она становится недоступной.
При вложении удалений в транзакцию можно восстановить удаленные записи с помощью метода RollbackTrans . Если вы находитесь в режиме пакетного обновления, вы можете отменить ожидающее удаление или группу ожидающих удалений с помощью метода CancelBatch .
Если попытка удаления записей завершается сбоем из-за конфликта с базовыми данными (например, запись уже была удалена другим пользователем), поставщик возвращает предупреждения в коллекцию Errors , но не останавливает выполнение программы. Ошибка во время выполнения возникает только при наличии конфликтов во всех запрошенных записях.
Если задано динамическое свойство Unique Table и recordset является результатом выполнения операции JOIN для нескольких таблиц, метод Delete удаляет строки только из таблицы, указанной в свойстве Unique Table .
Метод Delete принимает необязательный аргумент, позволяющий указать, какие записи будут затронуты операцией Delete . Единственными допустимыми значениями для этого аргумента являются следующие константы перечисления ADO AffectEnum :
adAffectCurrent Влияет только на текущую запись.
adAffectGroup Влияет только на записи, удовлетворяющие текущему параметру свойства Filter . Чтобы использовать этот параметр, свойству Filter необходимо задать значение FilterGroupEnum или массив Закладок .
В следующем коде показан пример указания adAffectGroup при вызове метода Delete . Этот пример добавляет некоторые записи в образец Recordset и обновляет базу данных. Затем он фильтрует набор записей с помощью константы перечисления фильтра 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