Boucle while

Résolu
appolofrance Messages postés 46 Date d'inscription mercredi 8 mai 2002 Statut Membre Dernière intervention 26 mars 2008 - 23 oct. 2006 à 21:48
appolofrance Messages postés 46 Date d'inscription mercredi 8 mai 2002 Statut Membre Dernière intervention 26 mars 2008 - 28 oct. 2006 à 16:33
Bonjour,

Do While MonRs.EOF <> True
If MonRs.Fields("Serie") = Textserie.Text Then
Affiche_Champ ' remplit les textbox
Exit Do
End If
MonRs.MoveNext
Loop

J' ai 3 enregistrements identiques que je souhaites voir.
Comment faire pour faire qu'il continue sa recherche ?

Merci
Paul
appolofrance
A voir également:

14 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
27 oct. 2006 à 00:18
Non, pas si tu utilises des boutons "Précédent", "Suivant"...

Il faut que ton Recordset soit toujours "vivant" pour être reconnu
lorsque tu cliques ces boutons et ainsi savoir où tu es rendu dans la
liste des enregistrements trouvés.


Dans certains programmes, je crée un Recordset général déclaré Public
dans un Module. Celui-ci me permet de me promener d'un enregistrement à
un autre partout dans mon programme. Je sais qu'il sera toujours Open.
Ainsi je peux me servir des boutons <<,<,>,>>

Pour d'autres procédures, je crée de nouveaux Recordset qui me servent
"localement". Quand je quitte ces procédures, je les Close.


Ça dépend toujours de la façon dont tu affiches ou te sers des enregistrements (textbox vs grille vs code)


MPi
3
appolofrance Messages postés 46 Date d'inscription mercredi 8 mai 2002 Statut Membre Dernière intervention 26 mars 2008 5
24 oct. 2006 à 01:02
Bonjour,

La premiere solution fonctionne mais j' ai mis 3 enregistrements pour exemple

Pour La deuxieme solution :
J' affiche dans textbox et voici le code de Affiche_Champ

Private Sub Affiche_Champ() 'Permet d' afficher les champs
Textmarque.Text = MonRs.Fields("Marque")
Textmodele.Text = MonRs.Fields("Modele")
Texttype.Text = MonRs.Fields("Type")
Textserie.Text = MonRs.Fields("Serie")
end sub

J' essaie dans un bouton nommer cmdsuivant
Do While MonRs.EOF <> True
If MonRs.Fields("Serie") = Textserie.Text Then
Affiche_Champ
Exit Do
Else
MonRs.MoveNext
End If
Loop

J' ai bien mon premier enregistrement, mais clique suivant et rien ne se passe !
Merci
paul
appolofrance
1
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
24 oct. 2006 à 19:51
effectivement,
Une requête selection avec le critère:
Table.Serie = Textserie.Text
c' est l' idéal.
1
appolofrance Messages postés 46 Date d'inscription mercredi 8 mai 2002 Statut Membre Dernière intervention 26 mars 2008 5
25 oct. 2006 à 22:50
Bonjour

Sub cmd_Suivant_Click()
  Do While (Not MonRs.EOF ) And (MonRs.Fields("Serie") <> Textserie.Text)
     MonRs.MoveNext
     If (Not MonRs.EOF) And _
        (MonRs.Fields("Serie") = Textserie.Text) Then _
        Affiche_Champ 'remplit les texbox
  Loop
End Sub

Sa fonctionne mais je n' ais pas les suivants quand "MonRS.Fields = Textserie"
Merci

Paul
appolofrance
1

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

Posez votre question
appolofrance Messages postés 46 Date d'inscription mercredi 8 mai 2002 Statut Membre Dernière intervention 26 mars 2008 5
25 oct. 2006 à 23:47
Bonjour,
J' ai une solution mais en utilisant do Until 

Private Sub CmdSuivant_Click()
 Do Until MonRs.EOF = True
If MonRs.Fields("Serie") <> Textserie.Text Then
  MonRs.MoveNext
Else
Affiche_Champ
MonRs.MoveNext
Exit Do
End If
  Loop
end sub

Merci pour votre aide je vais enfin pouvoir terminer le programme !
(Base de donnée access en ado sous VB6)
Paul



appolofrance
1
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
26 oct. 2006 à 11:57
Si tu veux afficher tes données dans une grille, tu peux utiliser une
boucle. J'utilise Do Until  Rs.EOF mais on peut utiliser While
Not...ou autre


Si tu veux afficher dans des textbox, tu ne peux pas vraiment utiliser
de boucles, puisque celle-ci va se terminer sur le dernier
enregistrement trouvé. Il faut donc que tu crées une requête SQL
spécifique à tes besoins et afficher les résultats dans tes texbox un
par un en utilisant des boutons Précédent, Suivant, Dernier, Premier


Style de requête:

"Select * From MaTable Where ChampSéries = '" & Textserie.text & "'"
If  Rs.Recordcount > 0 then ' il y a un ou des enregistrements

Affiche_Champ

else

'pas d'enregistrement

End if


Ou peut-être aie-je mal saisi le problème ... (?)
MPi
1
appolofrance Messages postés 46 Date d'inscription mercredi 8 mai 2002 Statut Membre Dernière intervention 26 mars 2008 5
26 oct. 2006 à 19:33
Bonjour,

Oui sa fonctionne aussi,
Il faut ouvrir et fermer le recordset à chaque fois ?

Merci
Paul
appolofrance
1
appolofrance Messages postés 46 Date d'inscription mercredi 8 mai 2002 Statut Membre Dernière intervention 26 mars 2008 5
28 oct. 2006 à 16:33
Bonjour,

Je n 'ais pas trouvé, je rage ....
J' ai lu ton texte MPi mais j' ai un soucis



MonRs.Open "select * From Tableportable Where Series = '" & Textserie.Text & "'"
J' ai le Message "Cette opération n' est pas autorisé si l' objet est ouvert". Comment corriger ce probleme ?

Merci
Paul
1
Profil bloqué
23 oct. 2006 à 22:18
Rajoute un Compteur comme ceci

Compteur = 0
Do While MonRs.EOF <> True
     If MonRs.Fields("Serie") = Textserie.Text Then
          Compteur =Compteur +1
          Affiche_Champ
           If Compteur= 3 Then Exit Do
     End If
     MonRs.MoveNext
Loop

GRENIER Alain[8D]
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
24 oct. 2006 à 00:24
Soit tu enlèves le Exit Do et tu verras apparaître tous les
enregistrements qui répondent aux critères,  (et ça dépend comment
tu gères dans Affiche_Champ)

soit que tu crées des boutons Suivant/Précédent... et là tu mets le MoveNext ou MovePrevious.


Dans quoi tu affiches ? textbox ou grille ?

MPi
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
24 oct. 2006 à 01:32
Bonsoir tout le monde,
tentes ceci :

Sub cmd_Suivant_Click()
  Do While (Not MonRs.EOF ) And (MonRs.Fields("Serie") <> Textserie.Text)
     MonRs.MoveNext
     If (Not MonRs.EOF) And _
        (MonRs.Fields("Serie") = Textserie.Text) Then _
        Affiche_Champ
  Loop
End Sub

chaibat
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
24 oct. 2006 à 01:41
rajoutes un compteur déclaré et initialisé hors Sub
hors Sub et qui s' incrémente après
Affiche_Champ pour savoir combien il a trouvé
d' occurences.
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
24 oct. 2006 à 01:57
après mûre reflexion

Dim Compteur As Integer
Compteur=0
le premier étant affiché au départ avec
MonRs.FindFirst "[Serie] LIKE'" & Textserie.Text & "'"
If NoMatch Then
  MsgBox "Aucune occurence"
Else
  Affiche_Champ
  Compteur=Compteur+1
End If 


à chaque Click sur cmd_Suivant_Click
Sub cmd_Suivant_Click()
 if Not MonRs.EOF Then MonRs.MoveNext
 Do While (Not MonRs.EOF ) And (MonRs.Fields("Serie") <> Textserie.Text)
     MonRs.MoveNext
 Loop
 If (Not MonRs.EOF) And _
        (MonRs.Fields("Serie") = Textserie.Text) Then
        Affiche_Champ
        Compteur=Compteur+1
 End If
End Sub

ps: pardon pour les posts successifs

Bonne soirée
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
24 oct. 2006 à 11:20
En fait, si tu déclares ton objet Recordset globalement, tu crées ton
Recordset une seule fois, disons avec un bouton "Rechercher"


Pour le code du bouton Suivant:

If Not MonRs.EOF then

    MonRs.Movenext

    Affiche_Champ

Else

    Msgbox "Dernier enregistrement atteint"

End If


Pour un bouton Précédent, il suffit d'utiliser BOF et MovePrevious

MPi
0
Rejoignez-nous