Supprimer un enregistrement d’un jeu d’enregistrements DAO

Vous pouvez supprimer un enregistrement existant dans une table ou un objet Recordset de type feuille de réponse dynamique à l’aide de la méthode Delete . Vous ne pouvez pas supprimer des enregistrements d'un objet Recordset de type capture instantanée. L’exemple de code suivant supprime tous les enregistrements en double dans la table Shippers.

Sub DeleteDuplicateShippers() 
 
Dim dbsNorthwind As DAO.Database 
Dim rstShippers As DAO.Recordset 
Dim strSQL As String 
Dim strName As String 
 
On Error GoTo ErrorHandler 
 
   Set dbsNorthwind = CurrentDb 
   strSQL = "SELECT * FROM Shippers ORDER BY CompanyName, ShipperID" 
   Set rstShippers = dbsNorthwind.OpenRecordset(strSQL, dbOpenDynaset) 
 
   ' If no records in Shippers table, exit. 
   If rstShippers.EOF Then Exit Sub 
 
   strName = rstShippers![CompanyName] 
   rstShippers.MoveNext 
 
   Do Until rstShippers.EOF 
      If rstShippers![CompanyName] = strName Then 
         rstShippers.Delete 
      Else 
         strName = rstShippers![CompanyName] 
      End If 
      rstShippers.MoveNext 
   Loop 
 
Exit Sub 
 
ErrorHandler: 
   MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description 
End Function

Lorsque vous utilisez la méthode Delete , le moteur de base de données Access supprime immédiatement l’enregistrement actif sans avertissement ni invite. La suppression d’un enregistrement n’entraîne pas automatiquement l’enregistrement suivant pour devenir l’enregistrement actif ; pour passer à l’enregistrement suivant, vous devez utiliser la méthode MoveNext . N’oubliez pas qu’une fois que vous avez quitté l’enregistrement supprimé, vous ne pouvez plus y revenir.

Si vous essayez d’accéder à un enregistrement après l’avoir supprimé sur un objet Recordset de type table, vous verrez l’erreur 3167, « L’enregistrement est supprimé ». Sur une feuille de réponse dynamique, vous verrez l’erreur 3021, « Aucun enregistrement actif ».

Si vous avez un clone d’objet Recordset positionné sur l’enregistrement supprimé et que vous essayez de lire sa valeur, l’erreur 3167 s’affiche, quel que soit le type d’objet Recordset . Si vous essayez d'utiliser un signet pour passer à un enregistrement supprimé, vous obtiendrez également l'erreur 3167.

Assistance et commentaires

Avez-vous des questions ou des commentaires sur Office VBA ou sur cette documentation ? Consultez la rubrique concernant l’assistance pour Office VBA et l’envoi de commentaires afin d’obtenir des instructions pour recevoir une assistance et envoyer vos commentaires.