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 :

recordset et recordcount


Sujet :

VBA Access

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Par défaut recordset et recordcount
    Bonjour à tous je souhaite compter le nombre d'enregistrement que me renvoi une requete.
    La requete me renvoi trois enregistrement pourtant le recordcount me renvoi 1...
    je viens de m'en rendre compte et j'utlise tres souvent le recordcount dans le code,du coup je me demande si cette méthode est bien fiable.

    j'ai lu le tuto suivant http://warin.developpez.com/access/d...artie_5#L5.4.5

    J'ai donc tester le movelast mais quand la requete ne renvoi pas d'enregistrement ca plante sur :
    en disant no current record...

    Quelqu'un a déja rencontrer le probleme ?

    J'espere que quelqu'un pourra m'aider car j'utilise souvent cette méthode dans le code.

    Merci

  2. #2
    Membre éprouvé
    Homme Profil pro
    Chef d'entreprise
    Inscrit en
    Mai 2011
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef d'entreprise
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2011
    Messages : 122
    Par défaut
    Bonsoir,

    Il faut que tu vérifies avant si des enregistrements sont présents avec la propriété NoMatch.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Par défaut
    Bonsoir et merci pour ta réponse mais
    renvoi false si j'ai des enregistrement et false si j'en ai pas.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Par défaut
    petite précision je travaille avec DAO

  5. #5
    Membre éprouvé
    Homme Profil pro
    Chef d'entreprise
    Inscrit en
    Mai 2011
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef d'entreprise
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2011
    Messages : 122
    Par défaut
    Autant pour moi, le NoMatch ne fonctionne qu'avec les méthode find et seek.
    Dans ton cas, paradoxalement, il faut tester l'existence d'enregistrements avec... recordCount. En effet, si il existe des enregistrements, le premier sera actif, donc recordCount vaudra 1, sinon, cette propriété vaudra 0.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Par défaut
    en fait je me suis mal exprimé, ce que je cherche a savoir c'est si ma requete renvoi au moins un enregistrement. Le nombre exact m'importe peu en fait. Pour avoir le nombre exact j'aurai pu faire tout simplement une requete avec un count.
    Donc pour tester s'il y a des enregistrements ou s'il n'y en a pas soit je fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IF not rs.eof then .....end if
    c'est bon ça ?estce que par pur hasard ca peut arriver d'ouvrir un recorset et qu'il se place directement sur eof ? et la ...

    ou bien j'ai lu quelque part ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IF rs.BOF = true AND rs.EOF = TRUE then ... END IF
    >> pas d'enregistrement

    ou bien le recordcount mais j'avoue avoir quelques doutes sur cette propriété.

    un avis ?

  7. #7
    Membre éprouvé
    Homme Profil pro
    Chef d'entreprise
    Inscrit en
    Mai 2011
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef d'entreprise
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2011
    Messages : 122
    Par défaut
    Et bien ce ce que je te disais dans mon message précédent, tu peux tester l'existence d'enregistrement avec recordCount. Lors de l'ouverture d'un recordset, l'enregistrement actif est toujours le premier, la propriété recordCount est donc à 1 - sauf dans le cas où il n'y a pas d'enregistrement, là recordCount vaut 0 d'où :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    If rs.recordCount Then
        Debug.Print "Présence d'enregistrements"
    Else
        Debug.Print "Pas d'enregistrement"
    End If

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Par défaut
    j'ai lu quelque part que le recordcount pouvait être a -1, ça se produit quand ?

    Je veux pas trop utiliser le recordcount vu tous les messages problématiques qu'il y a dessus en fonction du type de curseur choisi, ou de s'il y a des jointures ...

    Est-ce que tu sais si mes deux autres solutions sont bonnes ?
    Merci je poste mon code quand meme :
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    'Parcourir tous les plans d'activités pour afficher un message de purge global
    Do While Len(NomFichier) > 0
     
        'Contrction du message de confirmation de purge a l'utilisateur
        sMessagePurge = "Des saisies ont déja été effectuée pour le(s) couple(s) producteur / période suivant(s) :" & vbCrLf
     
        'ouverture du fichier
        Set xlsClasseur = xls.Workbooks.Open(sRepertoireChoisi & "\" & NomFichier)
     
        'Activer onglet "projet"
        Set xlsFeuille = xlsClasseur.Worksheets("projet")
        xlsFeuille.Activate
     
        'Y a t il déja des saisies pour la période et le producteur dans la table Activité service?
        SQLExistenceSaisie = "SELECT * FROM AssociationActiviteService WHERE Periode='" & xlsFeuille.Cells(NumLigneDebut, 2) & "' AND Producteur= '" & xlsFeuille.Cells(NumLigneDebut, 1) & "'"
        Set rs = CurrentDb.OpenRecordset(SQLExistenceSaisie)
     
        If Not rs.EOF Then
            sMessagePurge = sMessagePurge & xlsFeuille.Cells(NumLigneDebut, 1) & "-" & xlsFeuille.Cells(NumLigneDebut, 2) & vbCrLf
        End If
     
        Set rs = Nothing
     
        NomFichier = Dir()
    Loop

  9. #9
    Membre éprouvé
    Homme Profil pro
    Chef d'entreprise
    Inscrit en
    Mai 2011
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef d'entreprise
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2011
    Messages : 122
    Par défaut
    Lors de l'ouverture d'un recordset, deux cas peuvent se produire :

    - Il n'y a pas d'enregistrement :
    --> EOF et BOF ont la valeur True
    --> RecordCount a la valeur 0

    - Il y a un ou plusieurs enregistrements, le premier enregistrement est alors actif :
    --> EOF et BOF ont la valeur False
    --> RecordCount a la valeur 1

    Pour ce que tu souhaites faire, écrire "If not rst.EOF" ou "If not rst.BOF" ou "If rs.RecordCount = 1" produira les mêmes effets.

    La deuxième solution est une surcharge inutile puique à l'ouverture d'un recordset EOF et BOF ont toujours la même valeur.


    Edit : N'oublie pas de fermer tes recordset avec close, sinon tu verras la taille de base de données augmenter régulièrement et tu devras passer par des compactages régulièrement.

  10. #10
    Membre émérite
    Homme Profil pro
    Comptable
    Inscrit en
    Mars 2005
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Mars 2005
    Messages : 511
    Par défaut
    Bonjour,

    je ne sais pas si çà peux t'aider personnellement j'utilise une fonction pour compter le nombre d'enregistrement d'une requête en Sql. Ce serait possible de l'adapter avec une requête enregistrée.

    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
    Public Function FctCompteNbRecord(StrSql As String)
        Dim Db As Database, RstControle As Recordset
        Set Db = CurrentDb()
        'MsgBox StrSql
        Set RstControle = Db.OpenRecordset(StrSql, dbOpenDynaset)
     
        If RstControle.RecordCount = 0 Then
            ' s'il n'y a pas de donnée sortie de la fonction
            FctCompteNbRecord = 0
        Else
            RstControle.MoveLast
            FctCompteNbRecord = RstControle.RecordCount
        End If
        RstControle.Close
        Set Db = Nothing
    End Function

    Il faut aussi savoir que s'il n'y a pas d'enregistrement dans un recordset la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RstControle.RecordCount = 0
    est toujours = 0

    bonne chance

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Par défaut
    bonjour et merci pour vos réponses.

    Savez-vous quand le recordcount peut retourner -1 ?

    Merci

Discussions similaires

  1. Recordset ADO: Recordcount=-1
    Par Marc_27 dans le forum IHM
    Réponses: 4
    Dernier message: 14/10/2008, 15h06
  2. [VBA] Recordset : trop d'éléments obtenus par Recordcount
    Par Nenette_cherie dans le forum Access
    Réponses: 15
    Dernier message: 11/05/2006, 11h33
  3. RecordCount sur un Recordset
    Par Poussy-Puce dans le forum ASP
    Réponses: 1
    Dernier message: 27/02/2006, 18h08
  4. [ADO.NET] Equivalent recordcount d'un recordset
    Par totoche dans le forum Accès aux données
    Réponses: 4
    Dernier message: 30/03/2005, 16h02
  5. [recordset property] recordcount
    Par sekiryou dans le forum ASP
    Réponses: 12
    Dernier message: 08/11/2004, 20h49

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