Problèmes avec RecordCount

J’utilise RecordCount pour compter le nombre d’enregistrements dans un Recordset DAO… mais ça n’a pas l’air de fonctionner !

En DAO, l’objet Recordset dispose d’une propriété RecordCount qui est supposée donner le nombre d’enregistrements de la table/requête concernée. Mais si vous testez le listing suivant, vous constaterez qu’il ne fonctionne pas (la variable lngLignes renvoie systématiquement 1) :

La raison : RecordCount n’est valide que si le Recordset a été parcouru au moins une fois jusqu’au dernier enregistrement.

C’est automatique si le Recordset est de type Table (dbOpenTable), mais pas nécessairement sinon. A vous de provoquer un .MoveLast pour forcer cette lecture. Attention : ceci affecte forcément les performances de votre programme, on ne peut pas tout avoir !

Essayez plutôt le code suivant :

Important
L’exemple de code ci-dessus fait appel à la bibliothèque DAO (Microsoft DAO Object Library). Cette bibliothèque doit être associée à votre base de données pour que le programme fonctionne.

Pour plus de détails sur les références, consultez cette page.

Vous aimerez aussi...

7 réponses

  1. P dit :

    Your solution does the job but is not very efficient. try to add rst.MoveLast /
    rst.MoveFirst or use DCount() instead. http://stackoverflow.com/questions/6766099/record-count-in-access-table-using-vba

    • Hervé Inisan dit :

      Thanks for the comment. In fact, a rst.MoveLast is already done in the sample code. The code illustrates how it affects Recordcount, just as it is done on StackOverflow. 😉
      And there is no need for rst.MoveFirst here, as we just want to count records, we don’t need to use the Recordset after.

  2. bahahaan dit :

    bonjour c’est très super d’avoir comme ces information sur cette page
    je vous remercie beaucoup d’avoir m’aider à résoudre mon problème.
    cordialement

  3. Hervé Inisan dit :

    wagolo > Non, le traitement des notes doit pouvoir se faire sans Recordsets, puisque les notes suivent les mêmes règles les unes les autres.

  4. wagolo dit :

    Un traitement ligne a ligne, qu’est que cela veux dire? Est-ce qu’il est plus adapté que le SQL pour la gestion des Notes Scolalires?
    Comment peut on l’utiliser dans ce contexte?
    je vous remercie

  5. Hervé Inisan dit :

    Yeo > Difficile à expliquer en quelques mots. Globalement, un Recordset est un objet qui permet de manipuler les lignes d’une table ou d’une requête. Manipuler, c’est-à-dire : parcourir les lignes pour les lire une à une, les modifier, les supprimer, en ajouter de nouvelles.

    Le Recordset peut parfois faire double emploi avec certaines instructions SQL (SELECT, INSERT, DELETE, UPDATE). SQL est généralement plus court à écrire, et plus performant. Mais dans certains cas, les Recordsets seront plus lisibles. Et quand il faut vraiment un traitement ligne à ligne, seuls les Recordsets sont envisageables.

  6. YEO dit :

    qu’est qu’un’objet Recordset? a quoi sert il dans une base de données access?

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *