Loop et eof

cs_serge99 Messages postés 78 Date d'inscription lundi 29 août 2005 Statut Membre Dernière intervention 14 octobre 2006 - 13 mars 2006 à 16:00
cs_serge99 Messages postés 78 Date d'inscription lundi 29 août 2005 Statut Membre Dernière intervention 14 octobre 2006 - 13 mars 2006 à 18:34
J'ai besoin d'aide

J'ai un message d'erreur lors que j'exécute mon appli. et je ne sais où placer ce code:

If rsregistretemp.EOF = True Then
rsregistre.MoveLast

Peut-être devrais-je utiliser une autre méthode... suggestions sont les bienvenues

Voici mon code:

rsregistretemp.MoveFirst
rsregistretemp2.MoveFirst


With rsregistre
For i = 0 To rsregistretemp.RecordCount
LabelPtfus(3) = rsregistretemp.Fields("PtFusion")
Labeltrunk(4) = rsregistretemp.Fields("Troncon#1")
Labelcompte(2) = rsregistretemp.Fields("Compte")
Labelcable3(3) = rsregistretemp.Fields("NumCable")
Labeltube3(0) = rsregistretemp.Fields("CouleurTube")
Labelfibre3(1) = rsregistretemp.Fields("CouleurFibre")
Labelposition3(0) = rsregistretemp.Fields("position1")


Do While Not rsregistretemp2.EOF
SQLstmt6 = "SELECT * FROM registretemp where Troncon#1<>'" & rsregistretemp2.Fields("Troncon#2") & "'"

LabelPtfus(4) = rsregistretemp2.Fields("PtFusion")
Labeltrunk(2) = rsregistretemp2.Fields("Troncon#2")
Labelcompte(3) = rsregistretemp2.Fields("Compte2")
Labelcable3(0) = rsregistretemp2.Fields("NumCable2")
Labeltube3(1) = rsregistretemp2.Fields("CouleurTube2")
Labelfibre3(0) = rsregistretemp2.Fields("CouleurFibre2")
Labelposition3(1) = rsregistretemp2.Fields("position2")
If Labeltrunk(4) <> Labeltrunk(2) And Labelcable3(3) = Labelcable3(0) Then
rsregistre.AddNew
rsregistre.Fields("PtFusion") = LabelPtfus(3)
rsregistre.Fields("Troncon#1") = Labeltrunk(4)
rsregistre.Fields("Compte") = Labelcompte(2)
rsregistre.Fields("NumCable") = Labelcable3(3)
rsregistre.Fields("CouleurTube") = Labeltube3(0)
rsregistre.Fields("CouleurFibre") = Labelfibre3(1)
rsregistre.Fields("position1") = Labelposition3(0)
rsregistre.Fields("Troncon#2") = Labeltrunk(2)
rsregistre.Fields("Compte2") = Labelcompte(3)
rsregistre.Fields("NumCable2") = Labelcable3(0)
rsregistre.Fields("CouleurTube2") = Labeltube3(1)
rsregistre.Fields("CouleurFibre2") = Labelfibre3(0)
rsregistre.Fields("position2") = Labelposition3(1)
rsregistretemp2.MoveNext
End If

rsregistretemp.MoveNext
LabelPtfus(3) = rsregistretemp.Fields("PtFusion")
Labeltrunk(4) = rsregistretemp.Fields("Troncon#1")
Labelcompte(2) = rsregistretemp.Fields("Compte")
Labelcable3(3) = rsregistretemp.Fields("NumCable")
Labeltube3(0) = rsregistretemp.Fields("CouleurTube")
Labelfibre3(1) = rsregistretemp.Fields("CouleurFibre")
Labelposition3(0) = rsregistretemp.Fields("position1")
Loop
Next i
End With

7 réponses

cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
13 mars 2006 à 17:13
Salut,

Pourquoi passer par des labels intermédiaires ?
Je ne sais pas si ça peut t'aider mais, je traduirais le code que tu présentes par :

If Not rsregistretemp.EOF Then rsregistretemp.MoveFirst
If Not rsregistretemp2.EOF Then rsregistretemp2.MoveFirst

With rsregistre

Do While Not rsregistretemp.EOF

Do While Not rsregistretemp2.EOF

If rsregistretemp.Fields("Troncon#1") <> rsregistretemp2.Fields("Troncon#2") And rsregistretemp.Fields("NumCable") = rsregistretemp2.Fields("NumCable2") Then
.AddNew
.Fields("PtFusion") = rsregistretemp.Fields("PtFusion")
.Fields("Troncon#1") = rsregistretemp.Fields("Troncon#1")
.Fields("Compte") = rsregistretemp.Fields("Compte")
.Fields("NumCable") = rsregistretemp.Fields("NumCable")
.Fields("CouleurTube") = rsregistretemp.Fields("CouleurTube")
.Fields("CouleurFibre") = rsregistretemp.Fields("CouleurFibre")
.Fields("position1") = rsregistretemp.Fields("position1")
.Fields("Troncon#2") = rsregistretemp.Fields("Troncon#1")
.Fields("Compte2") = rsregistretemp2.Fields("Compte2")
.Fields("NumCable2") = rsregistretemp2.Fields("NumCable2")
.Fields("CouleurTube2") = rsregistretemp2.Fields("CouleurTube2")
.Fields("CouleurFibre2") = rsregistretemp2.Fields("CouleurFibre2")
.Fields("position2") = rsregistretemp2.Fields("position2")
.Update
End If

rsregistretemp2.MoveNext

Loop

rsregistretemp.MoveNext

Loop

End With
0
cs_jperre Messages postés 268 Date d'inscription lundi 9 janvier 2006 Statut Membre Dernière intervention 19 janvier 2017 2
13 mars 2006 à 17:15
Personnelement, pour parcourir les éléments d'un recordset, j'utilise la boucle Do comme ceci.
....
If Not rs.EOF Then
rs.MoveFirst
Do
...Code d'exploitation des enregistrements du recordset
rs.MoveNext
Loop Until rs.EOF
End If
rs.Close
....
Avec ce système, il n'y a pas de tentative d'accès à l'enregistrement suivant EOF.
Bon courage!...
0
cs_serge99 Messages postés 78 Date d'inscription lundi 29 août 2005 Statut Membre Dernière intervention 14 octobre 2006
13 mars 2006 à 17:50
Excellent :-)  Cependant, j'obtiens toujours le même message d'erreur et je n'obtiens pas les valeurs du dernier recordset lorsque j'utilise ce code: (P.S. J'utilise des labels intermédiaires pour visualisées avec F8 (temporairement) ce que je fais): If Not rsregistretemp.EOF Then rsregistretemp.MoveFirstIf Not rsregistretemp2.EOF Then rsregistretemp2.MoveFirst
With rsregistreFor i = 0 To rsregistretemp.RecordCountLabelPtfus(3) = rsregistretemp.Fields("PtFusion")Labeltrunk(4) = rsregistretemp.Fields("Troncon#1")Labelcompte(2) = rsregistretemp.Fields("Compte")Labelcable3(3) = rsregistretemp.Fields("NumCable")Labeltube3(0) = rsregistretemp.Fields("CouleurTube")Labelfibre3(1) = rsregistretemp.Fields("CouleurFibre")Labelposition3(0) = rsregistretemp.Fields("position1")
Do While Not rsregistretemp2.EOFSQLstmt6 = "SELECT * FROM registretemp where Troncon#1'" & rsregistretemp2.Fields("Troncon#2") & "'"
LabelPtfus(4) = rsregistretemp2.Fields("PtFusion")Labeltrunk(2) = rsregistretemp2.Fields("Troncon#2")Labelcompte(3) = rsregistretemp2.Fields("Compte2")Labelcable3(0) = rsregistretemp2.Fields("NumCable2")Labeltube3(1) = rsregistretemp2.Fields("CouleurTube2")Labelfibre3(0) = rsregistretemp2.Fields("CouleurFibre2")Labelposition3(1) = rsregistretemp2.Fields("position2")    If Labeltrunk(4) Labeltrunk(2) And Labelcable3(3) = Labelcable3(0) Then        rsregistre.AddNew        rsregistre.Fields("PtFusion") = LabelPtfus(3)        rsregistre.Fields("Troncon#1") = Labeltrunk(4)        rsregistre.Fields("Compte") = Labelcompte(2)        rsregistre.Fields("NumCable") = Labelcable3(3)        rsregistre.Fields("CouleurTube") = Labeltube3(0)        rsregistre.Fields("CouleurFibre") = Labelfibre3(1)        rsregistre.Fields("position1") = Labelposition3(0)        rsregistre.Fields("Troncon#2") = Labeltrunk(2)        rsregistre.Fields("Compte2") = Labelcompte(3)        rsregistre.Fields("NumCable2") = Labelcable3(0)        rsregistre.Fields("CouleurTube2") = Labeltube3(1)        rsregistre.Fields("CouleurFibre2") = Labelfibre3(0)        rsregistre.Fields("position2") = Labelposition3(1)    rsregistretemp2.MoveNext    End If
    rsregistretemp.MoveNext        LabelPtfus(3) = rsregistretemp.Fields("PtFusion")        Labeltrunk(4) = rsregistretemp.Fields("Troncon#1")        Labelcompte(2) = rsregistretemp.Fields("Compte")        Labelcable3(3) = rsregistretemp.Fields("NumCable")        Labeltube3(0) = rsregistretemp.Fields("CouleurTube")        Labelfibre3(1) = rsregistretemp.Fields("CouleurFibre")        Labelposition3(0) = rsregistretemp.Fields("position1")
LoopNext iEnd WithLorsque j'utilise intégralement ton code, rsregistretemp me donne toujours le même recordset... ce n'est pas ce que je veux. Rsregistretemp2 me donne exactement ce que je veux.
Voici un exemple de ce que je veux obtenir




PtFusion

Troncon#1
Position1

NumCable
Compte

CouleurTube

CouleurFibre


Troncon#2


Position2


NumCable2
Compte2

CouleurTube2
Fibre#2
CouleurFibre2


PHD2-23

T4000-29-105
1

CAD,29
1
0
Bleu
0
Bleu


T4000-105-25


1


CAD,29
1

Bleu
0
Bleu
C'est exactement ce que je veux obtenir. Cependant, je devrais avoir (dans mon exemple) 12 enregistrements mais j'en n'obtiens que 11 et j'ai le message d'erreur "BOF ou EOF est égal à true..."Voici un exemple de ce que j'obtiens avec ton code



PtFusion

Troncon#1
Position1

NumCable
Compte

CouleurTube

CouleurFibre


Troncon#2


Position2


NumCable2
Compte2

CouleurTube2
Fibre#2
CouleurFibre2


PHD2-23

T4000-105-25
1

CAD,29
1
0
Bleu
0
Bleu


T4000-105-25


1


CAD,29
1

Bleu
0
BleuComme tu peux le voir, j'obtiens 2 fois T4000-105-25... ce que je ne veux pasComment faire ??????
0
cs_jperre Messages postés 268 Date d'inscription lundi 9 janvier 2006 Statut Membre Dernière intervention 19 janvier 2017 2
13 mars 2006 à 17:59
Dans le dernier code fourni, il y a une séquence d'ajout de données avec
rregistre.AddNew
...
...
...
...
il manque rregistre.Update avant rregistre.MoveNext!...
Est ce un oubli, ou est ce que le code est tel quel?...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_serge99 Messages postés 78 Date d'inscription lundi 29 août 2005 Statut Membre Dernière intervention 14 octobre 2006
13 mars 2006 à 18:09
Il s'agit d'un oubli lors de la rédaction du mail original
0
cs_jperre Messages postés 268 Date d'inscription lundi 9 janvier 2006 Statut Membre Dernière intervention 19 janvier 2017 2
13 mars 2006 à 18:23
Autre erreur de code repérée :
For i=0 To rsregistretemp.RecordCount
- Le premier enregistrement d'un recordset commence à 1 (ce n'est pas comme la collection des champs qui va de 0 à Fields.Count-1)
- D'autre part, pour certains recordsets, il faut avoir fait la manoeuvre .MoveLast pour obtenir la valeur correcte de RecordCount.

Enfin, il y a moyen de simplifier grandement l'écriture du code :
rsregistretemp.Fields("PtFusion") peut s'écrire rsregistretemp("PtFusion") tout simplement.
0
cs_serge99 Messages postés 78 Date d'inscription lundi 29 août 2005 Statut Membre Dernière intervention 14 octobre 2006
13 mars 2006 à 18:34
Super, j'obtiens exactement ce que je voulais mais j'ai toujours mon message d'erreur BOF ou EOF est = à true...
0
Rejoignez-nous