Excluir registros usando o método Delete
O uso do método Delete marca o registro atual ou um grupo de registros em um objeto Recordset para exclusão. Se o objeto Recordset não permitir a exclusão de registro, ocorrerá um erro. Se você estiver no modo de atualização imediata, as exclusões ocorrerão no banco de dados imediatamente. Se um registro não puder ser excluído com êxito (devido a violações de integridade do banco de dados, por exemplo), o registro permanecerá no modo de edição após a chamada para Atualização. Isso significa que você precisa cancelar a atualização usando CancelUpdate antes de sair do registro atual (por exemplo, usando Close, Move ou NextRecordset).
Se você estiver no modo de atualização em lote, os registros serão marcados para exclusão do cache e a exclusão real ocorrerá quando você chamar o método UpdateBatch. (Para exibir os registros excluídos, defina a propriedade Filter como adFilterAffectedRecords depois que Delete for chamado.)
A tentativa de recuperar valores de campo do registro excluído gera um erro. Após a exclusão do registro atual, o registro excluído permanece atual até que você passe para outro registro. Depois que você sair do registro excluído, ele não estará mais acessível.
Se você aninhar as exclusões em uma transação, poderá recuperar os registros excluídos usando o método RollbackTrans. Se você estiver no modo de atualização em lote, poderá cancelar uma exclusão pendente ou um grupo de exclusões pendentes usando o método CancelBatch.
Se a tentativa de excluir os registros falhar devido a um conflito com os dados subjacentes (por exemplo, um registro já foi excluído por outro usuário), o provedor retornará avisos para a coleção Errors, mas não interromperá a execução do programa. Um erro em tempo de execução ocorre somente se há conflitos em todos os registros solicitados.
Se a propriedade dinâmica Unique Table estiver definida e o Recordset for o resultado da execução de uma operação JOIN em várias tabelas, o método Delete excluirá linhas apenas da tabela nomeada na propriedade Unique Table.
O método Delete usa um argumento opcional que permite especificar quais registros são afetados pela operação Delete. Os únicos valores válidos para esse argumento são uma das seguintes constantes enumeradas ADO AffectEnum:
adAffectCurrent Afeta apenas o registro atual.
adAffectGroup Afeta apenas os registros que atendem à configuração atual da propriedade Filter. A propriedade Filter precisa ser definida como um valor FilterGroupEnum ou uma matriz de Indicadores para usar essa opção.
O código a seguir mostra um exemplo de especificação de adAffectGroup ao chamar o método Delete. Este exemplo adiciona alguns registros ao Recordset de exemplo e atualiza o banco de dados. Em seguida, ele filtra o Recordset usando a constante enumerada do filtro adFilterAffectedRecords, o que deixa apenas os registros recém-adicionados visíveis no Recordset. Por fim, ele chama o método Delete e especifica que todos os registros que atendam à configuração atual da propriedade Filter (os novos registros) devem ser excluídos.
'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