Suppression d’enregistrements à l’aide de la méthode Delete
L’utilisation de la méthode Delete marque l’enregistrement actif ou un groupe d’enregistrements dans un objet Recordset pour suppression. Si l’objet Recordset n’autorise pas la suppression d’enregistrements, une erreur se produit. Si vous êtes en mode de mise à jour immédiate, les suppressions se produisent immédiatement dans la base de données. Si un enregistrement ne peut pas être supprimé correctement (en raison de violations de l’intégrité de la base de données, par exemple), l’enregistrement reste en mode d’édition après l’appel à Mise à jour. Cela signifie que vous devez annuler la mise à jour à l’aide de CancelUpdate avant de désactiver l’enregistrement actif (par exemple, en utilisant Fermer, Déplacerou NextRecordset).
Si vous êtes en mode de mise à jour par lots, les enregistrements sont marqués pour suppression du cache et la suppression réelle se produit lorsque vous appelez la méthode UpdateBatch. (Pour afficher les enregistrements supprimés, définissez la propriété Filter sur adFilterAffectedRecords après l’appel de Supprimer.)
La tentative de récupération des valeurs de champ à partir de l’enregistrement supprimé génère une erreur. Après avoir supprimé l’enregistrement actif, l’enregistrement supprimé reste actif jusqu’à ce que vous passez à un autre enregistrement. Une fois que vous quittez l’enregistrement supprimé, il n’est plus accessible.
Si vous imbriquez des suppressions dans une transaction, vous pouvez récupérer des enregistrements supprimés à l’aide de la méthode RollbackTrans. Si vous êtes en mode de mise à jour par lots, vous pouvez annuler une suppression en attente ou un groupe de suppressions en attente à l’aide de la méthode CancelBatch.
Si la tentative de suppression d’enregistrements échoue en raison d’un conflit avec les données sous-jacentes (par exemple, un enregistrement a déjà été supprimé par un autre utilisateur), le fournisseur retourne des avertissements à la collection Errors, mais n’interrompt pas l’exécution du programme. Une erreur d’exécution se produit uniquement s’il existe des conflits sur tous les enregistrements demandés.
Si la propriété dynamique Table unique est définie et que le jeu d’enregistrements est le résultat de l’exécution d’une opération JOIN sur plusieurs tables, la méthode Delete supprime les lignes uniquement de la table nommée dans la propriété Table unique.
La méthode Delete prend un argument facultatif qui vous permet de spécifier les enregistrements affectés par l’opération de suppression Delete. Les seules valeurs valides pour cet argument sont l'une des constantes énumérées suivantes ADO AffectEnum :
adAffectCurrent affecte uniquement l’enregistrement actif.
adAffectGroup Affecte uniquement les enregistrements répondant au paramètre de propriété Filter actuel. La propriété Filter doit être définie sur une valeur FilterGroupEnum ou un tableau de signets pour utiliser cette option.
Le code suivant montre un exemple de spécification de adAffectGroup en appelant la méthode Delete. Cet exemple ajoute des enregistrements à l’exemple Recordset et met à jour la base de données. Ensuite, il filtre le jeu d’enregistrements à l’aide de la constante d'énumération adFilterAffectedRecords, ce qui laisse uniquement les enregistrements nouvellement ajoutés visibles dans le jeu d’enregistrements . Enfin, il appelle la méthode Delete et spécifie que tous les enregistrements qui correspondent au paramètre de propriété actuelle Filter (les nouveaux enregistrements) doivent être supprimés.
'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