IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Compter le nombre d'enregistrement d'un rst DAO


Sujet :

VBA Access

  1. #1
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 193
    Points : 171
    Points
    171
    Par défaut Compter le nombre d'enregistrement d'un rst DAO
    Bonjour!

    Je n'arrive pas à compter le nombre d'enregistrement de mon recordset ( il devrait y en avoir 3).
    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    'rq pour les cotisations annuelles
     
    Dim Rq_CotAnnuel As String
    Rq_CotAnnuel = "SELECT Annee_Cotisation, SUM(MontantAnnee_Cotisations) AS MontantAnnuel FROM T_Entreprise, T_Cotisations WHERE T_Entreprise.Num_Ent = T_Cotisations.Num_Ent And DateAnee_Cotisations Is Not Null GROUP BY Annee_Cotisation;"
     
    Dim Rst_CotAnnuel As DAO.Recordset
    Set Rst_CotAnnuel = db.OpenRecordset(Rq_CotAnnuel, dbOpenForwardOnly, dbReadOnly)
     
    Dim essai As Integer
     
    'on se déplace au dernier enregistrement pour pouvoir compter le nb d'enregistrement
     
    Rst_CotAnnuel.MoveLast
    essai = Rst_CotAnnuel.RecordCount
    le débogueur s'arrete sur
    Rst_CotAnnuel.MoveLast
    en indiquant "opération non valide".

    Quelqu'un pourrait il m'aider ?
    Merci!

  2. #2
    Membre régulier
    Inscrit en
    Mars 2004
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 66
    Points : 83
    Points
    83
    Par défaut
    il est possible que l'erreur survienne parceque tu n'as pas un seul enregistrement dans ton recordset.

    essai de vérifier si tu n'es pas déjà à la fin de ton recordset aprés son ouverture.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if not Rst_CotAnnuel.MoveLast.eof then
      essai = Rst_CotAnnuel.RecordCount 
    else
      essai  = 0
    end if

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    essaye de les compter avec dcount
    Elle est pas belle la vie ?

  4. #4
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 193
    Points : 171
    Points
    171
    Par défaut

    il est possible que l'erreur survienne parceque tu n'as pas un seul enregistrement dans ton recordset.

    essai de vérifier si tu n'es pas déjà à la fin de ton recordset aprés son ouverture.
    Code:

    if not Rst_CotAnnuel.MoveLast.eof then
    essai = Rst_CotAnnuel.RecordCount
    else
    essai = 0
    end if
    Cela génère une erreur.
    MoveLast permet de se positionner sur le dernier enregistrement, donc EOF est forcément vrai, si je ne me trompe pas.


    Et la solution avec dcount, c'est à dire des select count ?

    Merci pour vos réponses !

  5. #5
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    bon histoire d'illustrer comment ça marche en DAO ... voici une petite fonction ... évidemment ça ne vaut pas un DCount()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Function DAOrecordscount(ByVal strTableOrQuery As String) As Long
     
    Dim rs As DAO.Recordset
    Set rs = CurrentDb.OpenRecordset(strTableOrQuery, dbOpenSnapshot)
     
    If rs.EOF Then
        DAOrecordscount = 0
    Else
        rs.MoveLast
        DAOrecordscount = rs.RecordCount
    End If
    rs.Close
    Set rs = Nothing
     
    End Function
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  6. #6
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour,

    Si tu as une erreur sur .MoveLast, c'est peut-être que ton rst est vide et donc que tu as déjà EOF avant l'instruction.
    Dans ce cas le code de Caféine doit gazer.

    Sinon, ça vient d'où cette idée de faire une MoveLast avant de lire la propriété RecordCount? Je suis le seul que cela choque?

    pgz
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  7. #7
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 193
    Points : 171
    Points
    171
    Par défaut
    J'ai lu ca dans un tutoriel sur les recordset DAO...
    Quand je mets directement .recordcount, il me retourne la valeur 1.
    Pourtant ma requete retourne trois enregistrements.

  8. #8
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 193
    Points : 171
    Points
    171
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Dim Rq_CotAnnuel As String
    Rq_CotAnnuel = "SELECT Annee_Cotisation, SUM(MontantAnnee_Cotisations) AS MontantAnnuel FROM T_Entreprise, T_Cotisations WHERE T_Entreprise.Num_Ent = T_Cotisations.Num_Ent And DateAnee_Cotisations Is Not Null GROUP BY Annee_Cotisation;"
     
    Dim Rst_CotAnnuel As DAO.Recordset
    Set Rst_CotAnnuel = db.OpenRecordset(Rq_CotAnnuel, dbOpenForwardOnly, dbReadOnly)
     
    Dim essai As Integer
     
    If Rst_CotAnnuel.EOF Then
        DAOrecordscount = 0
    Else
        Rst_CotAnnuel.MoveLast
        DAOrecordscount = Rst_CotAnnuel.RecordCount
    End If
    MsgBox DAOrecordscount
    le débogueur s'arrete toujours sur
    Rst_CotAnnuel.MoveLast
    le message d'erreur : "opération non valide"

  9. #9
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour,

    Je suis peut-être bouche, mais je ne comprends toujours pas pourquoi la valeur du recorscount serait liée à la position du curseur dans le recordset.

    Je te propose d'essayer ceci, juste pour voir ce qui se passe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Dim Rq_CotAnnuel As String 
    Rq_CotAnnuel = "SELECT Annee_Cotisation, SUM(MontantAnnee_Cotisations) AS MontantAnnuel FROM T_Entreprise, T_Cotisations WHERE T_Entreprise.Num_Ent = T_Cotisations.Num_Ent And DateAnee_Cotisations Is Not Null GROUP BY Annee_Cotisation;" 
     
    Dim Rst_CotAnnuel As DAO.Recordset 
    Set Rst_CotAnnuel = CurrentDb.OpenRecordset(Rq_CotAnnuel, dbOpenForwardOnly, dbReadOnly) 
     
     
    While not rst_CotAnnuel.EOF
        MsgBox rst_CotAnnuel("Annee_Cotisation") & " / " & rst_CotAnnuel.Recordscount
        rst_CotAnnuel.MoveNext
    Wend
    rst_CotAnnuel.Close
    set rst_CotAnnuel = Nothing
     
    End SUb
    Il se passe quoi?

    A+

    pgz
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  10. #10
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Cela vient à priori du type du recordset remplace le forward only par dbopendynamic.

    Enfin pour ce qui est de la propriété Recordcount :

    La propriété RecordCount retourne le nombre d'enregistrements total d'un Recordset de type Table ou le nombre d'enregistrements auxquels vous avez eu accès dans un Recordset d'un autre type.
    On peut être difficilement plus clair

  11. #11
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Merci Tofalu.

    J'ai vérifié dans l'aide.


    pgz
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  12. #12
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 193
    Points : 171
    Points
    171
    Par défaut

    Je suis peut-être bouche, mais je ne comprends toujours pas pourquoi la valeur du recorscount serait liée à la position du curseur dans le recordset.

    Oui j'ai vu ca dans un tutoriel, mais finalemement ca sert à rien !

    C'était bien à cause du type de recordset que j'avais des erreurs.

    En tout cas merci pour votre aide !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Compter le nombre d'enregistrement supprimer dans une jsp
    Par DarkWark dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 26/05/2006, 11h36
  2. Réponses: 4
    Dernier message: 15/04/2006, 19h41
  3. compter le nombre d'enregistrements d'un sous formulaire
    Par Alexandre Sahli dans le forum Access
    Réponses: 5
    Dernier message: 02/02/2006, 15h47
  4. Compter le nombre d'enregistrement
    Par poussinphp dans le forum Bases de données
    Réponses: 1
    Dernier message: 23/09/2005, 13h35
  5. [SQL][ACCESS]Compter le nombres d'enregistrement dans deux..
    Par pc152 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 05/06/2004, 12h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo