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 :

Boucle Infinie sur RecordSet


Sujet :

VBA Access

  1. #1
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    Juillet 2010
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2010
    Messages : 142
    Points : 77
    Points
    77
    Par défaut Boucle Infinie sur RecordSet
    Bonjour;
    Je reviens vers le forum pour demander de l'aide à propos d'un traitement que je souhaiterais effectuer.

    J'ai 2 tables, disons Table1 et Table2.
    Table1(id,champsN,SSCode#,Name,Value)
    Table2(SSCode,coef)
    La clé primaire de la Table2 est etrangére dans la Table1.

    Je souhaiterais faire ceci :
    Faire tant que le [SSCode] de la Table2 et la Table1,
    -> Ils sont pareils,
    Tester si le [coef] de ce [SSCode] de la Table1 = 0
    Si oui :
    - Ajouter à l'[id] de cette ligne, de la Table1 un "T" à la fin.
    - Ajouter le meme [champsN]
    - Ajouter le meme [SSCode]
    - Affecter à [Name] la chaine "Trade"
    - Ajouter à [Value] la meme valeur de cette ligne.
    Sinon :
    - Ajouter à l'[id] de cette ligne, de la Table1 un "T" à la fin.
    - Ajouter le meme [champsN]
    - Ajouter le meme [SSCode]
    - Affecter à [Name] la chaine "Trade"
    - Affecter à [Value] = [Value] de cette ligne / [coef] de ce meme SSCode
    Fin Si
    Voila, en gros c'est ça !

    Voila le SSCode que j'ai mis à disposition :
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    Sub maMethode()
    DoCmd.RunSQL "DELETE * FROM Table1 WHERE id LIKE '*T'"
    Set rst1 = db.OpenRecordset("SELECT * FROM Table1")
    Set rst2 = db.OpenRecordset("SELECT * FROM Table2")
    Do
        Do
            Set rst = db.OpenRecordset("SELECT coef, T1.*, [Value]/coef as Trade FROM Table2 T2,Table1 T1 WHERE T2.[SSCode]=T1.[SSCode] AND T1.[SSCode] LIKE '" & rst2.Fields("SSCode") & "' AND pd.[Name] LIKE 'PR'")
                If rst.RecordCount > 0 Then
                    Do
                        If rst.Fields("coef") <> 0 Then
                            rst1.AddNew
                            rst1.Fields("id") = rst.Fields("id") & "T"
                            rst1.Fields("champsN") = rst.Fields("champsN")
                            rst1.Fields("Name") = "TRADE"
                            rst1.Fields("Value") = rst.Fields("Trade")
                            rst1.Update
                        Else
                            rst1.AddNew
                            rst1.Fields("id") = rst.Fields("id") & "T"
                            rst1.Fields("ChampsN") = rst.Fields("champsN")
                            rst1.Fields("Name") = "TRADE"
                            rst1.Fields("Value") = rst.Fields("Value")
                            rst1.Update
                        End If
                        rst.MoveNext
                    Loop Until rst.EOF
                End If
            rst2.MoveNext
        Loop Until rst2.EOF
    Loop Until rst1.EOF
    rst2.Close
    rst1.Close
    rst.Close
    End Sub
    A noter que la requete rst peut retourner plusieurs enregistrements, car un [SSCode] peut etre affecté à plusieurs ligne de Table1.

    Apres maintes tentatives, j'ai soit l'Erreur 3022 (alors que normalement ça doit pas etre...), soit une boucle infini qui bloque carement Access; et apres verification, j'ai constaté que quelques données ont bien été inseré dans la table !!

    Je pense avoir une erreur au niveau des boucles do while ou au niveau des MoveNext ...

    Si vous avez des propositions ^^"

    Cordialement.

  2. #2
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 183
    Points : 1 362
    Points
    1 362
    Par défaut
    Bonjour,

    A première vue, je dirais qu'il manque un movenext sur rst1.
    Mais pourquoi faire des boucles alors que 2 requètes update de masse peuvent faire la même chose ?

  3. #3
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    Juillet 2010
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2010
    Messages : 142
    Points : 77
    Points
    77
    Par défaut
    Citation Envoyé par Kloun Voir le message
    Bonjour,

    A première vue, je dirais qu'il manque un movenext sur rst1.
    Mais pourquoi faire des boucles alors que 2 requètes update de masse peuvent faire la même chose ?
    Bonjour,
    Merci pour la reponse !

    2 requetes Update? Pourquoi? moi ce que je souhaiterais c'est "ajouter" des lignes à ma table, non pas en modifier !

    Et le movenext sur le rst1 .. ? je vois pas où ?

  4. #4
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Citation Envoyé par Kloun Voir le message
    Bonjour,

    A première vue, je dirais qu'il manque un movenext sur rst1.
    +1, et aussi je dirais qu'à première vue les boucles sur rst1 et rst2 ne servent absolument à rien, puisque seul rst sert dans le code et que rst1 ne sert qu'en output.

    Je te suggère de d'abord formaliser ton code et ensuite de l'écrire car il doit reflèter ta logique.

  5. #5
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    Juillet 2010
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2010
    Messages : 142
    Points : 77
    Points
    77
    Par défaut
    Citation Envoyé par Godzestla Voir le message
    +1, et aussi je dirais qu'à première vue les boucles sur rst1 et rst2 ne servent absolument à rien, puisque seul rst sert dans le code et que rst1 ne sert qu'en output.

    Je te suggère de d'abord formaliser ton code et ensuite de l'écrire car il doit reflèter ta logique.
    Les boucles sur rst1 et rst2 ne servent absolument à rien? La requete rst peut retourner un tableau à 3 ou + lignes, c'est pour cela que j'ai fais cette boucle..
    J'avoue qu'il me faudrait bien un rst1.MoveNext . . .
    Vous pourriez m'eclairer dessus ?

Discussions similaires

  1. Boucle infini sur Cat
    Par Jiheme44 dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 16/05/2013, 12h12
  2. [XL-2010] Boucle infinie sur macro
    Par Excel_man dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 20/02/2013, 18h07
  3. boucle infinie sur remplissage du rapport
    Par couetbis dans le forum Jasper
    Réponses: 5
    Dernier message: 15/08/2010, 07h39
  4. Probleme Boucle infinie Recordset.movenext "muet"?
    Par shub dans le forum VBA Access
    Réponses: 7
    Dernier message: 14/06/2006, 13h22

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