Compter le nombre d’enregistrements dans un jeu d’enregistrements DAO

Vous souhaiterez peut-être connaître le nombre d’enregistrements dans un objet Recordset . Par exemple, vous pouvez créer un formulaire qui indique le nombre d’enregistrements dans chacune des tables d’une base de données. Vous pouvez également modifier l’apparence d’un formulaire ou d’un état en fonction du nombre d’enregistrements qu’il inclut.

La propriété RecordCount contient le nombre d’enregistrements dans un objet Recordset de type table ou le nombre total d’enregistrements accessibles dans un objet Recordset de type feuille de réponse dynamique ou instantané. Lorsqu'un objet Recordset ne comporte aucun enregistrement, sa propriété RecordCount a la valeur 0.

Remarque

La valeur de la propriété RecordCount est égale au nombre d’enregistrements auxquels les utilisateurs ont accédés. Supposons, par exemple, que vous créez une feuille de réponse dynamique ou un instantané et que vous n’avez accédé qu’à un seul enregistrement. Si vous vérifiez la propriété RecordCount immédiatement après avoir créé la feuille de réponse dynamique ou l'instantané pour au moins un enregistrement, sa valeur est 1. Pour visiter tous les enregistrements, utilisez la méthode MoveLast immédiatement après l’ouverture de l’objet Recordset, puis utilisez MoveFirst pour revenir au premier enregistrement. Cette opération ne peut pas s'effectuer automatiquement, surtout avec des jeux d'enregistrements volumineux, car elle serait trop lente.

Lorsque vous ouvrez un objet Recordset de type table, vous visitez en fait tous les enregistrements dans la table sous-jacente, et la valeur de la propriété RecordCount est égale au nombre d'enregistrements dans la table à l'ouverture de l'objet Recordset.

Les transactions annulées peuvent rendre la valeur de la propriété RecordCount obsolète lorsque plusieurs utilisateurs accèdent aux enregistrements. Pour cette raison, compacter la base de données permet de rétablir la valeur correcte du nombre d'enregistrements dans la table.

L’exemple de code suivant crée un objet Recordset de type instantané, puis détermine le nombre d’enregistrements dans l’objet Recordset :

Function FindRecordCount(strSQL As String) As Long 
 
Dim dbsNorthwind As DAO.Database 
Dim rstRecords As DAO.Recordset 
 
On Error GoTo ErrorHandler 
 
   Set dbsNorthwind = CurrentDb 
 
   Set rstRecords = dbsNorthwind.OpenRecordset(strSQL) 
 
   If rstRecords.EOF Then 
      FindRecordCount = 0 
   Else 
      rstRecords.MoveLast 
      FindRecordCount = rstRecords.RecordCount 
   End If 
 
   rstRecords.Close 
   dbsNorthwind.Close 
 
   Set rstRecords = Nothing 
   Set dbsNorthwind = Nothing 
 
Exit Function 
 
ErrorHandler: 
   MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description 
End Function

Au fur et à mesure que l’application supprime des enregistrements dans un objet Recordset de type feuille de réponse dynamique, la valeur de la propriété RecordCount décroît. Cependant, dans un environnement à plusieurs utilisateurs, les enregistrements supprimés par d’autres utilisateurs ne sont reflétés dans la valeur de la propriété RecordCount que lorsque l’enregistrement actuel est positionné sur un enregistrement supprimé. À ce moment-là, la valeur de la propriété RecordCount décroît d'un enregistrement.

Utilisez alors la méthode Requery sur l'objet Recordset, suivie de la méthode MoveLast, pour définir la propriété RecordCount avec le nombre total d'enregistrements actuellement dans l'objet Recordset.

Un objet Recordset de type instantané est, quant à lui, statique, c'est-à-dire que la valeur de sa propriété RecordCount ne change pas lorsque vous ajoutez ou supprimez des enregistrements dans sa table sous-jacente.

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.