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

Access Discussion :

Recordset : nom_rst.MoveFirst : Stockage dans une variable ?


Sujet :

Access

  1. #1
    Membre averti Avatar de snoopy69
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 737
    Points : 395
    Points
    395
    Par défaut Recordset : nom_rst.MoveFirst : Stockage dans une variable ?
    Bonjour ...

    J'ai une petite question ...

    J'aimerais en fait tester si il y a un enregistrement correspondant à une requête que j'ai faite et j'aimerais faire ce test juste avant que je fasse mon :

    nom_rst.MoveFirst.

    En fait j'aimerais afficher un msgbox quand je fais nom_rst.MoveFirst si il n'y a pas d'enregistrement et je voulais faire cela avec un test IF mais le problème c'est que ce que j'ai essayé de faire cela et cela ne marche pas ...

    Ce que j'ai fait, j'ai créer une variable et j'ai essayé de stocker ceci dedans nom_rst.MoveFirst de cette façon :

    nom_variable = nom_rst.MoveFirst

    et ouais cela ne fonctionne pas trop ...

    Avez-vous une idée pour mon problème ???

    Merci de votre aide ...
    ... Je me méfie de l'irrespect mais je revendique le droit à la frénésie ...

  2. #2
    Membre éprouvé
    Avatar de keita
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations forums :
    Inscription : Novembre 2002
    Messages : 881
    Points : 1 121
    Points
    1 121
    Par défaut
    Essai ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If nom_rst.recordcount=0 then
    msgbox "Aucun enreg .........."
    nom_rst.close
    set nom_rst=nothing
    exit sub
    End if
    Peut etre que j'ai pas compris
    @+

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 710
    Points : 847
    Points
    847
    Par défaut
    Salut,

    Petit bémol pour ce qui est du recordcount. Si tu n'a pas parcourru tous le recordset, le recordcount peut être faux. Typiquement voila ce que je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    If rs.BOF = true and rs.EOF = true then
        msgbox "aucuns enregistrement ..."
    else
        rs.movelast
        rs.movefirst
        msgbox " il y a " & rs.recordcount & " enregistrement(s) ... "
    end if
    A+

  4. #4
    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
    faux ou null ?
    Elle est pas belle la vie ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 710
    Points : 847
    Points
    847
    Par défaut
    Re,

    Pas extract en fait (en général = 1 même avec plein d'enregistrement)

    Fait l'essais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Set rs = currentdb.openrecordset("Table1")
    Debug.print rs.recordcount
    rs.movelast
    rs.movefirst
    debug.print rs.recordcount
    A+

  6. #6
    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
    La propriété recordcount retourne :

    Le nombre d'enregistrements total pour un recordset de type dbopenTable
    Le nombre d'enregistrement parcouru pour tous les autres recordset

    Dans tous les cas, à l'ouverture, quelque soit le type de recordset, la propriété RceordCount retournera une valeur positive différente de zéro si le recordset n'est pas vide. Par contre cette valeur ne sera pas la même suivant qu'il s'agisse d'un recordset de type table ou bien dynaset.

    Mais d'une manière générale on préfere utiliser la propriété EOF du recordset qui indique s'il elle est vraie qu'on est en fin de curseur. Donc si à l'ouverture EOF=True, alors le curseur est vide. Inutile de tester BOF, une seule des deux suffit.

    Enfin, le movefirst semble inutile dans le code de Muhad'hib puisque par défaut, si le curseur est plein, on se trouve à la première position. Enfin, on utilisera le movelast pour valorisier recordcount uniquement si on est pas dans un recordset de type table

    On aura donc ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With oRst
     If not .Eof then .Movelast
     msgbox "le curseur contient" & .RecordCount & " enregistrement(s)"
    End With
    Remarquons que le if ne tient que sur une ligne puisque dans tous les cas, ce qu'on veut faire c'est afficher le nombre d'enregistrement. C'est à dire soit zéro, soit le nombre d'enregistrement parcouru.

    Enfin, il faut préciser que lorsque la méthode OpenRecordset est utilisée, celle ci génere par défaut un recordset de type OpenTable lorsque c'est possible ou bien dynaset si ce ne l'est pas. Toutefois un curseur dont la source est une table externe (liée) ne peut être utilsé en mode dbOpenTable

    Conclusion : Dans la majorité des cas, vous n'utiliserez pas de recordset OpenTable mais des Dynaset. Et donc dans ce cas, la propriété Recordcount retournera le nombre d'enregistrements à l'unique condition que vous ayez atteint le dernier au préalable dans votre traitement

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 710
    Points : 847
    Points
    847
    Par défaut
    Salut,


    Merci Tofalu pour ces précisions.

    Citation Envoyé par Tofalu
    le movefirst semble inutile dans le code de Muhad'hib puisque par défaut, si le curseur est plein, on se trouve à la première position
    Comme j'utilise en général des recordset de type dynaset, j'ai pris l'habitude de faire movelast puis movefirst pour, quand j'ai compté les enregistrements, être sur le premier pour le traitement du recordset qui suit.

    J'ai aussi pris l'habitude de tester le EOF et le BOF, parceque j'utilise une fonction et que je ne suis pas toujours dans un cas où le recodset vient d'être ouvert.
    Citation Envoyé par Tofalu
    Donc si à l'ouverture EOF=True, alors le curseur est vide. Inutile de tester BOF, une seule des deux suffit.
    Donc pour tester si le recordset est vide je dois tester le EOF et Le BOF.

    Merci encore pour tes lumières !
    A+

  8. #8
    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
    Dans ce cas, en effet tout ton code est justifié et on se heurte là un débat assez difficile à savoir :

    Vaut il mieux un code réutilisable légerement moins performant car possédant des instructions inutiles ou bien un code adapté, donc moins souple mais plus efficace.

    A vrai dire, il nous faut souvent choisir entre simplicité / confort et robustesse. Entre les deux mon coeur balance, tout dépend en fait des quantités de données générées, de la fréquence d'utilisation et des ressources necessaires.

    Il est certains que pour un recordset de 10 enregistrements, on y voit aucune différence donc autant prendre la simplicité. Mais dés qu'il s'agit de manipuler des ittérations, c'est là que ça se corse, les choix deviennent parfois compliqués

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 35
    Points : 34
    Points
    34
    Par défaut
    Hello
    Dans l'aide de vba il utilise recorsetclone pour ça non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    If Not (Forms!nom.RecordsetClone.EOF) Then
    Forms!nom.RecordsetClone.MoveLast
    Forms!nom.Caption = Forms!nom.Caption & ": " & Forms!nom.RecordsetClone.RecordCount & " enregistrements trouvés."
    Else 
    msgbox "Aucun enregistrement trouvé."
    End If
    et tu n'as pas touché a ton vrai recordest.

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 710
    Points : 847
    Points
    847
    Par défaut
    Salut,

    Citation Envoyé par Tofalu
    Vaut il mieux un code réutilisable légerement moins performant car possédant des instructions inutiles ou bien un code adapté, donc moins souple mais plus efficace.
    C'est bien la question que je me suis posé, et comme c'est une fonction qui est suceptible d'être utilisée dans plusieurs situation, le code est "souple". C'est vrai que dans certain cas, cette fonction sera plus lourde que nécessaire, mais elle fonctionne dans tous les cas.

    Citation Envoyé par Homegrown
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not (Forms!nom.RecordsetClone.EOF) Then
    Merci pour l'info mais cela ne fonctionne que dans le cas d'un formulaire. Dans le cas dont je parle, c'est un recordset que je crée et il n'y a pas de recordsetclone.

    A+

  11. #11
    Membre éprouvé
    Avatar de keita
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations forums :
    Inscription : Novembre 2002
    Messages : 881
    Points : 1 121
    Points
    1 121
    Par défaut
    Je suggere qu'on recentre le debat:
    Snoopy a ecrit:
    En fait j'aimerais afficher un msgbox quand je fais nom_rst.MoveFirst si il n'y a pas d'enregistrement et je voulais faire cela avec un test IF mais .......
    Tofalu a ecrit:
    Dans tous les cas, à l'ouverture, quelque soit le type de recordset, la propriété RecordCount retournera une valeur positive différente de zéro si le recordset n'est pas vide.
    Alors question à Tofalu:
    Et si à l'ouverture, le recordset est vide; recordCount retourne quoi?
    On peut penser que la reponse à cette question est donnée par Muhad'hib; en effet il ecrit:
    Petit bémol pour ce qui est du recordcount. Si tu n'a pas parcourru tous le recordset, le recordcount peut être faux.
    Je ne suis pas d'accord; pour moi , si à l'ouverture un recordset ne contient rien, il retourne zéro; conséquence? il est inutile de le parcourir par un MoveLast ; vraiment inutile.
    par contre et comme le dit Tofalu, si à l'ouverture le recordset contient quelque chose, il retournera une valeur positive differente de zero; généralement, il retourne 1; et alors on le parcours maintenant avec un movelast pour qu'il donne tout son contenu qui cette fois peut etre 1 ou plusieurs.
    C'est pourquoi le test que j'ai proposé devrait donné satisfaction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If nom_rst.recordcount=0 then 
            msgbox "Aucun enreg .........." 
            nom_rst.close 
            set nom_rst=nothing 
            exit sub 
    End if
    Une suite à ce code devrait etre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    If nom_rst.recordcount = 0 then 
            msgbox "Aucun enreg .........." 
            nom_rst.close 
            set nom_rst=nothing 
            exit sub                     
    End if 
    nom_rst.MoveLast
    nom_rst.MoveFirst
    msgbox nom_rst.RecordCount   ' msgbox donne ici le nbre total d'enreg
    et blablabla..............
    et blablabla..............
    @+[/code]

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 710
    Points : 847
    Points
    847
    Par défaut
    Re,

    Citation Envoyé par keita
    Je ne suis pas d'accord
    Ben tu n'es peut-être pas d'accord avec moi mais tu propose en fait un code trés proche du mien. Je teste la présence d'enregistrement (pas avec recordcount mais avec EOF et BOF) et si il y a des enregistrements je fais un movelast pour savoir, via un recordcount, le nombre d'enregistrement ... ce qui est la même logique que le code que tu propose

    Cela dit, comme j'ignorais que :
    Citation Envoyé par Tofalu
    Dans tous les cas, à l'ouverture, quelque soit le type de recordset, la propriété RceordCount retournera une valeur positive différente de zéro si le recordset n'est pas vide.
    , j'ai voulu ajouter une remarque sur le recordcount et proposer de tester l'absence d'enregistrement avec la méthodes EOF et BOF d'un recordset. Mais je vois aujourd'hui que ton code fonctionnera trés bien.

    A+

  13. #13
    Membre éprouvé
    Avatar de keita
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations forums :
    Inscription : Novembre 2002
    Messages : 881
    Points : 1 121
    Points
    1 121
    Par défaut
    OK Brother!

    @+

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 710
    Points : 847
    Points
    847
    Par défaut
    Re,

    Bon mon commentaire aura un peu encombré le post, mais il m'aura aussi appris des choses sur la propriété recordcount !

    A+

Discussions similaires

  1. Stockage dans une variable temporaire
    Par Audpidou911 dans le forum MATLAB
    Réponses: 6
    Dernier message: 19/01/2011, 12h11
  2. [MySQL] Stockage dans une variable apres la selection
    Par kitcarson23 dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 07/12/2010, 11h45
  3. stockage dans une variable
    Par pseudobidon57 dans le forum Linux
    Réponses: 2
    Dernier message: 31/08/2007, 11h56
  4. Réponses: 8
    Dernier message: 01/04/2006, 15h22
  5. insérer les recordset d'un while dans une variable
    Par yoda_style dans le forum ASP
    Réponses: 4
    Dernier message: 31/03/2005, 10h01

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