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 :

Parcourir l'ensemble des enregistrements d'une table


Sujet :

Access

  1. #1
    Membre régulier
    Inscrit en
    Septembre 2005
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 137
    Points : 74
    Points
    74
    Par défaut Parcourir l'ensemble des enregistrements d'une table
    Bonjour

    Je sais que le sujet de ma recherche se trouve sûrement déjà sur le forum ou sur le FAQ. Mais à chaque fois que j'ai essayé de faire des recherches, j'y passe un temps phénoménal pour trouver (parfois seulement ) ce que je cherche. Et l'intérêt d'un forum est, pour moi, de satisfaire une interrogation d'une personne sans qu'elle soit contrainte d'effectuer ces recherches.

    Par exemple, là, je me trouve avec un test fait en VBA qui fonctionne. Par contre, ça ne marche qu'avec la première ligne de la table. J'aimerai étendre ce test à toutes les lignes de la table : j'ai bien essayé de faire une boucle "For each ... Next", mais la condition du for each n'est apparemment pas bonne (ça me dit "type incompatible"). Il y a des astuces pour faire une boucle qui fonctionne ?

    Aurélien

  2. #2
    Membre confirmé
    Avatar de Petogaz
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 479
    Points : 580
    Points
    580
    Par défaut
    salut,

    le mieux c'est d'afficher le code qui ne marche pas. parce que là ça va dépendre de comment tu crées ta boucle. de plus tu as les recordset qui te permette de parcourir tes enregistrements.

  3. #3
    Membre régulier
    Inscrit en
    Septembre 2005
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 137
    Points : 74
    Points
    74
    Par défaut
    Pas de pb ;-) :

    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 rst As recordset
    Dim tpm As recordset
    Dim bds As Database
    Dim fld As Field
     
        Set bds = CurrentDb
        Set rst = bds.OpenRecordset("tableA", dbOpenTable)
        Set tpm = bds.OpenRecordset("TableB", dbOpenTable)
     
        For Each fld In tpm
                If tpm!Spec = rst!ES_standard Then
                Forms!f1.spf.Value = Forms!f1.Price.Value * Forms!f2.factor
            End If
        Next
    Quand je ne mets pas le for-each, le test If fonctionne. Dès que j'insère la boucle, c'est fini !
    En fait, je voudrais que le "if" se fasse pour tous les "tpm!Spec".

  4. #4
    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
    Tiens je n'ai jamais utilisé for each pour des fields ...
    d'habitude j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = 0 to rst.Fields.Count - 1

  5. #5
    Futur Membre du Club
    Inscrit en
    Août 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Salut,

    N'aurais-tu pas oublié de définir ta variable fld ?

  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 : 71
    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 n'ai pas compris ce que tu veux faire, mais qq remarques:

    rst et tpm seraient plutôt des DAO.Recordset

    tpm n'est pas une collection. tpm.Fields oui.

    à chaque fois que ta condition sera vraie, tu modifieras le contenu d'un contrôle 'spf' du formulaire 'f1', chaque nouvelle valeur écrasant l'ancienne. Ca sert à quoi tout ça?
    SI je ne m'abuse, bien-sûr!
    Bonne chance,
    pgz

  7. #7
    Membre régulier
    Inscrit en
    Septembre 2005
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 137
    Points : 74
    Points
    74
    Par défaut
    Il faut la définir avant ? Je pensais qu'elle prenait les valeurs que je lui indiquais et qu'il n'y avait pas besoin de l'initialiser avant ?
    Parce en ce qui concerne la déclaration de fld, c'est fait (Dim fld As Field au début).

  8. #8
    Membre régulier
    Inscrit en
    Septembre 2005
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 137
    Points : 74
    Points
    74
    Par défaut
    Le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = 0 to rst.Fields.Count - 1
    Parcours l'ensemble des champs de tous les recordset de la tables ? J'ai bien compri ou je fais une erreur ?
    Parce qu'en fait, je veux juste parcourir l'ensemble des recordsets (= ligne) d'un champ (= colonne) d'une table. Je réfléchis bien ou je mélange tout ?

  9. #9
    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
    Citation Envoyé par Aurèl90
    Le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = 0 to rst.Fields.Count - 1
    Parcours l'ensemble des champs de tous les recordset de la tables ? J'ai bien compri ou je fais une erreur ?
    Parce qu'en fait, je veux juste parcourir l'ensemble des recordsets (= ligne) d'un champ (= colonne) d'une table. Je réfléchis bien ou je mélange tout ?
    Petite rectification de vocabulaire :
    records = lignes
    fields = colonnes
    recordset = jeu d'enregistrements

    pour tout parcourir : faire une boucle sur les Records et une boucle sur les Fields

  10. #10
    Membre régulier
    Inscrit en
    Septembre 2005
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 137
    Points : 74
    Points
    74
    Par défaut
    Merci, comme ça c'est clair dans ma tête ! ;-)
    En fait, je n'étais pas trop loin de la vérité.

  11. #11
    Membre régulier
    Inscrit en
    Septembre 2005
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 137
    Points : 74
    Points
    74
    Par défaut
    Encore une petite question sur le sujet :
    Quand on veut accéder à la ligne i d'une table, on fait le même genre que dans les autres langages : Record(i) ?

  12. #12
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    salut,

    je ne sais pas où tu t'es perdu dans la FAQ mais tu devrais lire le tutoriel DAO; pour le déplacement dans les enregistrements, dans la partie "accès aux données" :
    http://warin.developpez.com/TutorielDAO/?page=partie_5

  13. #13
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Citation Envoyé par Aurèl90
    En fait, je voudrais que le "if" se fasse pour tous les "tpm!Spec".
    Tu fais une boucle sur le recordset correspondant
    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 rst As recordset
    Dim tpm As recordset
    Dim bds As Database
    Dim fld As Field
     
        Set bds = CurrentDb
        Set rst = bds.OpenRecordset("tableA", dbOpenTable)
        Set tpm = bds.OpenRecordset("TableB", dbOpenTable)
     
        Do Until tpm.EOF
                If tpm!Spec = rst!ES_standard Then
                     Forms!f1.spf.Value = Forms!f1.Price.Value * Forms!f2.factor
                End If
          tpm.MoveNext
       Loop
    Si maintenant il faut aussi parcourir l'autre recordset rst alors fais une autre boucle imbriquée

  14. #14
    Membre régulier
    Inscrit en
    Septembre 2005
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 137
    Points : 74
    Points
    74
    Par défaut
    J'ai maintenant un gros problème qui fout toute la fonction par terre :
    Le programme ne fait pas le test if et effectue le calcul quel que soit le résultat du test. Mais merde, il le fait exprès pour me contrarier en fin de semaine ou quoi ?

  15. #15
    Membre actif
    Avatar de Trini
    Homme Profil pro
    Dresseur de puce
    Inscrit en
    Juillet 2005
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dresseur de puce

    Informations forums :
    Inscription : Juillet 2005
    Messages : 189
    Points : 264
    Points
    264
    Par défaut
    Bonjour,

    Coool,
    Comme l'a écrit DMboup tu parcours la table TPM, mais par contre tu restes toujours sur le 1er enrgistrement de RST (c'est peut-être voulu...), sa valeur est toujours la même.
    Et pis a chaque enregistrement de TPM tu mets à jour les mêmes controles des formulaires F1 et F2...

    En bref ça serait bien que tu expliques clairement ce que tu veux vraiment faire comme traitement, ce sera plus facile pour t'aider.....

    @+

  16. #16
    Membre régulier
    Inscrit en
    Septembre 2005
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 137
    Points : 74
    Points
    74
    Par défaut
    C'est voulu de rester toujours sur le premier enregistrement de rst. Je voudrai comparer un champ (ES_standard) du premier enregistrement de rst avec tous les enregistrements de la colonne "spec" de tpm. Et quand il trouve que les deux sont égaux, il fait le calcul ; seulement dans ce cas ! Et il se peut que que l'enregistrement à trouver ne soit pas dans la table tpm et que le calcul ne soit pas fait. Je voudrais que le cacul soit fait quand il trouve deux enregistrements des tables tpm et rst égaux. Sinon, il affichera une msgbox pour dire que ce qu'on cherche n'existe pas dans la table tpm.
    Déjà, enfin si le test d'égalité voulait se faire, ça m'aiderait !

  17. #17
    Membre régulier
    Inscrit en
    Septembre 2005
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 137
    Points : 74
    Points
    74
    Par défaut
    Et j'aimerai que les contrôles des formulaire f1 et f2 ne changent que quand le test retourne vrai. Normalement, un "if" doit fonctionner comme ça ; c'est pour ça que je ne comprends pas ???

  18. #18
    Membre régulier
    Inscrit en
    Septembre 2005
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 137
    Points : 74
    Points
    74
    Par défaut
    J'ai mis des msgbox en afficant les caleurs de tpm!spec et rst!ES_standard, et ce sont les bonnes valeurs. Donc le if devrait voir, qu'au début, les valeurs ne sont pas identiques et ne pas faire le calcul !

Discussions similaires

  1. [MySQL] Modification des enregistrements d'une table à partir d'un formulaire
    Par Maria1505 dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 18/12/2006, 17h32
  2. Réponses: 1
    Dernier message: 11/08/2006, 23h02
  3. Taille des enregistrements d'une table
    Par Stbaurl dans le forum Décisions SGBD
    Réponses: 6
    Dernier message: 11/07/2006, 09h19
  4. [WD9] Cliquer sur des enregistrements dans une table
    Par oz80 dans le forum WinDev
    Réponses: 2
    Dernier message: 15/12/2005, 20h11
  5. [D-7][PostGres]Récuperer l'ensemble des colonnes d'une table
    Par Escandil dans le forum Bases de données
    Réponses: 1
    Dernier message: 21/10/2005, 09h17

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