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

IHM Discussion :

Valeur du compte d'enregistrements incorrecte [AC-2007]


Sujet :

IHM

  1. #1
    Membre habitué
    Avatar de DamKre
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2007
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2007
    Messages : 487
    Points : 183
    Points
    183
    Par défaut Valeur du compte d'enregistrements incorrecte
    Bonjour.

    Je souhaite mettre dans une étiquette "Affichage de l'alerte n°X sur Y."

    J'ai donc procédé comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Form_Current()
    On Error GoTo Erreurs
     
    ProgressionAlerte.Caption = "Affichage de l'alerte n°" & Me.CurrentRecord & " sur " & Form.Recordset.RecordCount
    [...]
    Cela donne le résultat suivant :
    • à l'ouverture du formulaire, cela donne toujours "alerte 1 sur 1". -> La valeur n'est pas correcte
    • si je vais à l'enregistrement suivant, cela donne le bon résultat (exemple : "alerte 2 sur 7" ) -> La valeur est correcte.
    • si je retourne au premier enregistrement, cela donne alors "alerte 1 sur 7" -> la valeur est correcte.


    Pourquoi, à l'ouverture du formulaire, la valeur de Form.Recordset.RecordCount est-elle incorrecte, alors qu'elle donne le bon résultat par la suite ?

    Pour information, voici le code à l'ouverture du formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Form_Open(Cancel As Integer)
    On Error GoTo Erreurs
     
    Fermer.SetFocus
     
    Exit Sub
     
    Erreurs:
    [...]
    Pouvez-vous me dire ce qui ne fonctionne pas ?
    J'ai beau tester, tester encore, ce code fonctionne sauf pour le premier affichage.

    Merci de vos lumières.
    DamKre
    Plus je découvre, plus je me rends compte que je ne sais rien...

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonjour,
    Pourquoi, à l'ouverture du formulaire, la valeur de Form.Recordset.RecordCount est-elle incorrecte, alors qu'elle donne le bon résultat par la suite ?
    étrange, c'est peut-être lié au type de recordsource est-ce une requête ?
    attention, le résultat est faussé en cas d'application d'un filtre.
    Sinon, essaie de faire un Movelast, puis un MoveFirst pour revenir au premier enregistrement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Form_Load()
    Me.Recordset.MoveLast
    Me.Recordset.MoveFirst
    End Sub
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  3. #3
    Membre habitué
    Avatar de DamKre
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2007
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2007
    Messages : 487
    Points : 183
    Points
    183
    Par défaut
    Bonjour!
    Merci de la réponse.

    Citation Envoyé par tee_grandbois Voir le message
    étrange, c'est peut-être lié au type de recordsource est-ce une requête ?
    Non, ce formulaire a pour source une simple table.

    Citation Envoyé par tee_grandbois Voir le message
    attention, le résultat est faussé en cas d'application d'un filtre.
    Le formulaire s'ouvre effectivement le plus souvent avec un filtre.
    J'ai également ouvert le formulaire sans filtre, avec le même résultat.

    Citation Envoyé par tee_grandbois Voir le message
    Sinon, essaie de faire un Movelast, puis un MoveFirst pour revenir au premier enregistrement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Form_Load()
    Me.Recordset.MoveLast
    Me.Recordset.MoveFirst
    End Sub
    Cette solution semble fonctionner pour l'instant. Merci.
    Cette technique simule-t-elle en quelque sorte un "refresh" du formulaire ?
    DamKre
    Plus je découvre, plus je me rends compte que je ne sais rien...

  4. #4
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonjour,
    Cette technique simule-t-elle en quelque sorte un "refresh" du formulaire ?
    Si on veut car cela concerne les propriétés: le fait d'exécuter un MoveLast met à jour le RecordCount du RecordSet. Ensuite le MoveFirst se positionne sur le premier enregistrement du formulaire (propriété CurrentRecord).
    Le formulaire s'ouvre effectivement le plus souvent avec un filtre.
    J'ai également ouvert le formulaire sans filtre, avec le même résultat.
    pour l'ouverture avec filtre cela confirme ce que je disais dans mon premier post.
    Pour ce qui est de l'ouverture sans filtre cela ne devrait pas, à priori, provoquer l'anomalie sauf, peut-être en cas de nombre élevé d'enregistrements, dans ce cas le RecordCount n'est probablement pas mis à jour (à vérifier avec une table plus petite ?)
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  5. #5
    Membre habitué
    Avatar de DamKre
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2007
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2007
    Messages : 487
    Points : 183
    Points
    183
    Par défaut
    Re-bonjour !

    Citation Envoyé par tee_grandbois Voir le message
    Si on veut car cela concerne les propriétés: le fait d'exécuter un MoveLast met à jour le RecordCount du RecordSet. Ensuite le MoveFirst se positionne sur le premier enregistrement du formulaire (propriété CurrentRecord)
    Explication très claire, merci

    Citation Envoyé par tee_grandbois Voir le message
    Pour ce qui est de l'ouverture sans filtre cela ne devrait pas, à priori, provoquer l'anomalie sauf, peut-être en cas de nombre élevé d'enregistrements, dans ce cas le RecordCount n'est probablement pas mis à jour (à vérifier avec une table plus petite ?)
    Il n'y a que 11 enregistrements actuellement

    Le formulaire est avec propriété "Feuille de réponse dynamique", Ajout et suppression de données désactivées.
    Je ne sais pas si ces éléments t'aident.

    Peut-on considérer ce problème comme résolu, ou on essaie de voir plus loin où cela bloque ?
    DamKre
    Plus je découvre, plus je me rends compte que je ne sais rien...

  6. #6
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Peut-on considérer ce problème comme résolu, ou on essaie de voir plus loin où cela bloque ?
    Cela pourrait être lié à la version 2007: je n'ai pas ce souci avec 2013.
    Eventuellement, pour investiguer, il faudrait que j'ai une copie de la base (uniquement table sans données confidentielles et le formulaire), sinon on peut considérer que le problème est résolu.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  7. #7
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    bonjour,

    je pense qu'il vaut mieux ici utiliser Recordsetclone :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Form_Current()
    On Error GoTo Erreurs
    dim n1 as long
    with Me.recordsetclone
    .movelast
    .movefirst
    n1= .recordcount
    end with
     
    ProgressionAlerte.Caption = "Affichage de l'alerte n°" & Me.CurrentRecord & " sur " & n1
    [...]
    cdlt
    "Always look at the bright side of life." Monty Python.

  8. #8
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut


    Autre possibilité :

    Dans les événements : Sur Ouverture et Sur Activation, utiliser le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ProgressionAlerte.Caption = "Affichage de l'alerte n°" & Me.CurrentRecord & " sur " & DCount("NomChamp","NomTable")
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  9. #9
    Membre habitué
    Avatar de DamKre
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2007
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2007
    Messages : 487
    Points : 183
    Points
    183
    Par défaut
    Bonjour à tous,

    Citation Envoyé par tee_grandbois Voir le message
    Cela pourrait être lié à la version 2007: je n'ai pas ce souci avec 2013.
    Eventuellement, pour investiguer, il faudrait que j'ai une copie de la base (uniquement table sans données confidentielles et le formulaire), sinon on peut considérer que le problème est résolu.
    Access se comporte bizarrement avec cette DB depuis un petit temps (mais cela ne fait pas l'objet de ce souci).

    Souhaites-tu que je t'envoie cela en MP ?

    Citation Envoyé par micniv Voir le message
    bonjour,

    je pense qu'il vaut mieux ici utiliser Recordsetclone :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Form_Current()
    On Error GoTo Erreurs
    dim n1 as long
    with Me.recordsetclone
    .movelast
    .movefirst
    n1= .recodrset.count
    end with
     
    ProgressionAlerte.Caption = "Affichage de l'alerte n°" & Me.CurrentRecord & " sur " & n1
    [...]
    cdlt
    Merci de t'être penché dessus également.
    Quelle est la différence avec la solution proposée par tee_grandbois, qui propose aussi un "move last/first" ?

    Citation Envoyé par Jeannot45 Voir le message


    Autre possibilité :

    Dans les événements : Sur Ouverture et Sur Activation, utiliser le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ProgressionAlerte.Caption = "Affichage de l'alerte n°" & Me.CurrentRecord & " sur " & DCount("NomChamp","NomTable")
    Merci à toi également.
    Cette solution doit également gérer le fait que le formulaire applique un filtre. Or, le DCount donnera le nombre total d'enregistrements sur la table. Prévoir une condition basée sur le fait que le formulaire soit filtré ou non et ajouter le cas échéant une condition au DCount ne rendra-t-il pas la procédure plus lourde ?
    DamKre
    Plus je découvre, plus je me rends compte que je ne sais rien...

  10. #10
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut
    Cette solution doit également gérer le fait que le formulaire applique un filtre. Or, le DCount donnera le nombre total d'enregistrements sur la table. Prévoir une condition basée sur le fait que le formulaire soit filtré ou non et ajouter le cas échéant une condition au DCount ne rendra-t-il pas la procédure plus lourde ?
    Tu traites énormément de données ?
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  11. #11
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Quelle est la différence avec la solution proposée par tee_grandbois, qui propose aussi un "move last/first" ?
    J’agis sur le recordsetclone au lieu du recordset
    "Always look at the bright side of life." Monty Python.

  12. #12
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonjour,
    Citation Envoyé par micniv Voir le message
    J’agis sur le recordsetclone au lieu du recordset
    en complément de la réponse de micniv: comme son nom l'indique, RecordSetClone est une copie du RecordSet de l'objet en cours, propriété très pratique pour effectuer certaines opérations sur les enregistrements sans perturber le RecordSet en cours mais qui permet quand même sa mise à jour.

    Souhaites-tu que je t'envoie cela en MP ?
    oui, faisons ça.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  13. #13
    Membre habitué
    Avatar de DamKre
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2007
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2007
    Messages : 487
    Points : 183
    Points
    183
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    oui, faisons ça.
    La voilà ;-)


    Pièce jointe 553476
    DamKre
    Plus je découvre, plus je me rends compte que je ne sais rien...

  14. #14
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    C'est la propriété Bouton de déplacement: à Non qui génère le problème quelque soit l'affichage par défaut (unique ou continu), il faut donc bien forcer la mise à jour du RecordCount avec MoveLast et MoveFirst au chargement du formulaire.

    A noter aussi que la propriété Barre de défilement: Verticale ou Les deux, met bien à jour le RecordCount malgré Bouton de déplacement à Non
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  15. #15
    Membre habitué
    Avatar de DamKre
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2007
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2007
    Messages : 487
    Points : 183
    Points
    183
    Par défaut
    Rebonjour,

    Je te remercie, j'aurai au moins appris quelque chose grâce à toi.

    En ce qui concerne
    Citation Envoyé par Jeannot45 Voir le message
    Tu traites énormément de données ?
    La réponse est potentiellement oui.


    Belle journée à tous !
    DamKre
    Plus je découvre, plus je me rends compte que je ne sais rien...

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

Discussions similaires

  1. Problème de compte d'enregistrement
    Par codial dans le forum Bases de données
    Réponses: 5
    Dernier message: 29/01/2008, 15h59
  2. message "#erreur" sur compte d'enregistrements
    Par MAMANHOU dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 08/09/2007, 14h07
  3. Compte d'enregistrement avec plusieurs critères
    Par MAMANHOU dans le forum VBA Access
    Réponses: 9
    Dernier message: 25/07/2007, 09h14
  4. Réponses: 3
    Dernier message: 29/03/2007, 15h28
  5. [SQL] valeur du nombre d'enregistrement
    Par Destiny dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 16/03/2006, 10h48

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