Compartilhar via


Excluindo registros usando o método Delete

Usar o método Delete marca o registro atual ou um grupo de registros em um recordset objeto para exclusão. Se o recordset objeto 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ê deve cancelar a atualização usando CancelUpdate antes de sair do registro atual (por exemplo, usando Fechar, Moverou 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, configure a propriedade Filter para adFilterAffectedRecords após Delete ser chamado.)

A tentativa de recuperar valores de campo do registro excluído gera um erro. Depois de excluir o registro atual, o registro excluído permanecerá atual até que você mude para um registro diferente. Depois que você se afastar do registro excluído, ele não estará mais acessível.

Se você fizer exclusões aninhadas em uma transação, poderá recuperar 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 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 o Erros coleção, mas não interromperá a execução do programa. Um erro em tempo de execução ocorrerá somente se houver 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 Excluir. Os únicos valores válidos para esse argumento são um dos seguintes AffectEnum constantes enumeradas:

  • adAffectCurrent afeta apenas o registro atual.

  • adAffectGroup afeta apenas os registros que atendem à configuração atual da propriedade Filtro. A propriedade Filter deve ser definida para um valor do tipo FilterGroupEnum ou uma matriz de marcadores para usar essa opção.

O código a seguir mostra um exemplo de especificação adAffectGroup ao chamar o método Delete. Este exemplo adiciona alguns registros ao exemplo do Recordset e atualiza o banco de dados. Em seguida, filtra o Recordset usando a constante enumerada 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 atendem à 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