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 :

Probleme Boucle infinie Recordset.movenext "muet"?


Sujet :

VBA Access

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 236
    Points : 80
    Points
    80
    Par défaut Probleme Boucle infinie Recordset.movenext "muet"?
    Bonjour,
    le petit bout de code ci dessous donne une boucle infinie, pourtant je fait bien "bouger" mes recordset je n'y comprend rien
    je sais que c'est un peu long desolé

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    'Verification du parcours
                    Dim Mesparcours As New ADODB.Recordset
                    Dim parcourDISCORB As New ADODB.Recordset
                    parcourDISCORB.Open ("SELECT * from PARCOURS WHERE N°ELEVE = " & [numeleve] & " ORDER BY PLACE "), DBDISCORB, adOpenDynamic, adLockReadOnly
                    'si l'eleve a un parcours
                    If Not parcourDISCORB.EOF Then
                        Mesparcours.Open ("SELECT * from PARCOURS WHERE N°ELEVE = " & [nvnumeleve] & " ORDER BY PLACE "), MaDB, adOpenDynamic, adLockOptimistic, adCmdText
                        'Si il y a deja un parcours dans la base
                        If Not Mesparcours.EOF Then
                            j = 0
                            i = 0
                            
                            While Not parcourDISCORB.EOF
                                place = parcourDISCORB.Fields("place")
                                Mesparcours.MoveFirst
                                MsgBox Mesparcours.Fields("N°eleve")
                                MsgBox ("place discorb = " & place)
                                While Not Mesparcours.EOF
                                    If Mesparcours.Fields("place") = place And Mesparcours.Fields("modif") < parcourDISCORB.Fields("modif") Then
                                        ann = parcourDISCORB.Fields("Annee")
                                        eta = parcourDISCORB.Fields("etablissement")
                                        cla = parcourDISCORB.Fields("classe")
                                        com = parcourDISCORB.Fields("commentaire")
                                        
                                        
                                        MsgBox ("place = " & Mesparcours.Fields("place"))
                                        If Mesparcours.Fields("ann") <> parcourDISCORB.Fields("ann") Then
                                            NvRqt = "update parcours set annee= #" & [ann] & "#  where N°Eleve = " & [nvnumeleve] & " and place = " & [place] & " "
                                            MaDB.Execute NvRqt, iAffected, adExecuteNoRecords
                                        End If
                                        
                                        If Mesparcours.Fields("etablissement") <> parcourDISCORB.Fields("etablissement") Then
                                            NvRqt = "update parcours set etablissement = '" & [eta] & "'  where N°Eleve = " & [nvnumeleve] & "and place = " & [place] & "  "
                                            MaDB.Execute NvRqt, iAffected, adExecuteNoRecords
                                        End If
                                        
                                        If Mesparcours.Fields("classe") <> parcourDISCORB.Fields("classe") Then
                                            NvRqt = "update parcours set classe= " & [cla] & "  where N°Eleve = " & [nvnumeleve] & "and place = " & [place] & " "
                                            MaDB.Execute NvRqt, iAffected, adExecuteNoRecords
                                        End If
                                        
                                        If Mesparcours.Fields("commentaire") <> parcourDISCORB.Fields("commentaire") Then
                                            NvRqt = "update parcours set commentaire= " & [com] & "  where N°Eleve = " & [nvnumeleve] & " and place = " & [place] & ""
                                            MaDB.Execute NvRqt, iAffected, adExecuteNoRecords
                                        End If
                                        
                                        Dat = Date
                                        NvRqt = "update parcours set modif = #" & [Dat] & "# where N°Eleve= " & [nvnumeleve] & " and place = " & [place] & " "
                                        MaDB.Execute NvRqt, iAffected, adExecuteNoRecords
                                        
                                    End If
                                    
                                    Mesparcours.MoveNext
                                    i = i + 1
                                Wend
     
                                j = j + 1
                                parcourDISCORB.MoveNext
                            Wend
               
                            'Si il ya des parcours qui n'etaient pas rentré dans notre base
                            If j > i Then
                                parcourDISCORB.MoveLast
                                For k = 0 To j - i
                                    Mesparcours.AddNew
                                    Mesparcours.Fields("N°eleve") = nvnumeleve
                                    Mesparcours.Fields("Annee") = parcourDISCORB.Fields("Annee")
                                    Mesparcours.Fields("etablissement") = parcourDISCORB.Fields("etablissement")
                                    Mesparcours.Fields("classe") = parcourDISCORB.Fields("classe")
                                    Mesparcours.Fields("commentaire") = parcourDISCORB.Fields("commentaire")
                                    Mesparcours.Fields("modif") = Date
                                    Mesparcours.Fields("place") = i + 1
                                    Mesparcours.Update
                                    i = i + 1
                                Next k
                            End If
                            Mesparcours.Close
                        Else
                        
                            While Not parcourDISCORB.EOF
                                Mesparcours.AddNew
                                Mesparcours.Fields("N°eleve") = nvnumeleve
                                Mesparcours.Fields("Annee") = parcourDISCORB.Fields("Annee")
                                Mesparcours.Fields("etablissement") = parcourDISCORB.Fields("etablissement")
                                Mesparcours.Fields("classe") = parcourDISCORB.Fields("classe")
                                Mesparcours.Fields("commentaire") = parcourDISCORB.Fields("commentaire")
                                Mesparcours.Fields("modif") = Date
                                Mesparcours.Fields("place") = parcourDISCORB.Fields("place")
                                Mesparcours.Update
                                parcourDISCORB.MoveNext
                            Wend
                            Mesparcours.Close
                        End If
                   
                    End If
                    parcourDISCORB.Close
    La boucle oncriminé est en rouge et le depassement de capacité a lieu sur la ligne en gras
    Merci

  2. #2
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    Essaie ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    .....
    While Not Mesparcours.EOF and Not parcourDISCORB.EOF
    .....

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 236
    Points : 80
    Points
    80
    Par défaut
    non je ne peut pas assembler les 2 boucles car pour chaque i il y a plusieurs j tu comprend? En gros ca represente un eleve et son parcours scolaire.
    Je regarde tout les parcours de tous les eleve
    Donc je boucle sur les eleve et a l'interieur je boucle sur les differentes années..

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 236
    Points : 80
    Points
    80
    Par défaut
    j'ai l'impression qu'il ne "voit" pas mon mesparcours.movenext

  5. #5
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Re,

    Peut-être ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    .....
         Mesparcours.MoveNext
         if Mesparcours.eof then exit do
         i = i + 1
    Wend
    .....

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 236
    Points : 80
    Points
    80
    Par défaut
    Je ne comprend pas du tout ton code mais le but de mon i = i+ 1 est de compter le nombre de passage dans la premiere boucle

  7. #7
    Membre chevronné Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Points : 2 232
    Points
    2 232
    Par défaut
    Il faudrait que tu test pour savoir si tu reste toujours sur le meme enregistrement ou si il passe quand même au suivant.
    Est ce que ça peut pas etre parce que ta pas mi de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Mesparcours.MoveFirst
    au début
    Sinon ça peut pas être que tu a beaucoup d'enregistrement et que ta variable n'est juste pas assez grande, elle est de quel type?
    autant l'hiver éclate que l'hétéroclite
    le vrai geek c'est celui qui croit qu'il y a 1024 mètres dans un kilomètre

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 236
    Points : 80
    Points
    80
    Par défaut
    elle se bloque a 37000 et je n'ai pas autant d'enregistrement. et oui lorsque j'affiche le fields N° de cette requete j'obtiens tjs le meme N° donc j'ai vraiment l'impression qu'il ne voit pas le movenext

    edit : Je viens de refaire tout de A à Z et je me tappe tjs la meme erreur c'est vraiment chiant
    Ce bout de code est basé sur un autre j'ai juste changé les noms des recordset et adapté a la structure de cette table mais l'autre bout de code fonctionne très bien!!

Discussions similaires

  1. probleme boucle infinie
    Par xargin dans le forum VBA Access
    Réponses: 1
    Dernier message: 21/10/2011, 13h08
  2. probleme boucle infini dans tableau
    Par tanaka59 dans le forum C++
    Réponses: 8
    Dernier message: 30/01/2011, 21h17
  3. Diminuer la taille d'un code et probleme boucle infini
    Par Alucard9800XT dans le forum MATLAB
    Réponses: 3
    Dernier message: 11/06/2007, 11h42

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