Boucle avec VB
Fermé
NagNag
-
25 oct. 2007 à 16:55
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 - 30 oct. 2007 à 16:12
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 - 30 oct. 2007 à 16:12
A voir également:
- Boucle avec VB
- Vb - Télécharger - Langages
- Vb cable - Télécharger - Audio & Musique
- Xiaomi s'éteint tout seul et se rallume en boucle - Forum Xiaomi
- Tv orange chargement en boucle ✓ - Forum TV & Vidéo
- Huawei s'allume et s'éteint en boucle - Forum Huawei
71 réponses
J'utilise I=R pour ne pas avoir un comptage toujours à partir de 1.
R = est le premier enregistrement, et S le dernier enregistrement.
Mon travail sur requête SQL paramétré chaque année et les classes correspondantes, donc si je prends :
Qr= "SELECT N° FROM Etudiants WHERE classe = ?Parametre? AND Annee = ?Parametre?"
Supposons que j'ai (n) classes EG1,EG2,.....EGn et j'ai (n) années scolaires AS1,AS2.....ASn
les numeros d'inscriptions de EG1 de 1 à 100 et EG2 de 101 à 199 .... et ainsi de suite nécéssairement, il faut utiliser I=R pour que la boucle débute à partir du premier enregistrement et pas de 1, si on a EG1 la boucle va compter à partir de 1 et si on a EG2 la boucle va compter à partir de 101 ...... mais la boucle précédente (c-a-d que je te donnes aujourd'hui) présente une erreur de comptage et pas d'exécution, il n'y a pas de 1 ou 101 ou 201... c-a-d la boucle débute son comptage qu'après le premier enregistrement, et par conséquent il ne retourne pas ce dernier, t'a une idée concernant ce cas, merci de me répondre, j'espère que ta compris l'idée générale de travail.
R = est le premier enregistrement, et S le dernier enregistrement.
Mon travail sur requête SQL paramétré chaque année et les classes correspondantes, donc si je prends :
Qr= "SELECT N° FROM Etudiants WHERE classe = ?Parametre? AND Annee = ?Parametre?"
Supposons que j'ai (n) classes EG1,EG2,.....EGn et j'ai (n) années scolaires AS1,AS2.....ASn
les numeros d'inscriptions de EG1 de 1 à 100 et EG2 de 101 à 199 .... et ainsi de suite nécéssairement, il faut utiliser I=R pour que la boucle débute à partir du premier enregistrement et pas de 1, si on a EG1 la boucle va compter à partir de 1 et si on a EG2 la boucle va compter à partir de 101 ...... mais la boucle précédente (c-a-d que je te donnes aujourd'hui) présente une erreur de comptage et pas d'exécution, il n'y a pas de 1 ou 101 ou 201... c-a-d la boucle débute son comptage qu'après le premier enregistrement, et par conséquent il ne retourne pas ce dernier, t'a une idée concernant ce cas, merci de me répondre, j'espère que ta compris l'idée générale de travail.
Je peux utiliser ça alors :
While Not Qr.EOF
If i <> Qr.Fields(0) Then
lstaud.AddItem i
Qr.MovePrevious
End If
Qr.MoveNext
i = i + 1
Wend
NB: concernant MovePrevious pour que i suit immédiatement les enregistrements, sinon il va ajouter les enregistrements existants dés la première différence entre i et le champ correspondant, car pour le reste toujours i ne suit pas les Enrg, NON ?
While Not Qr.EOF
If i <> Qr.Fields(0) Then
lstaud.AddItem i
Qr.MovePrevious
End If
Qr.MoveNext
i = i + 1
Wend
NB: concernant MovePrevious pour que i suit immédiatement les enregistrements, sinon il va ajouter les enregistrements existants dés la première différence entre i et le champ correspondant, car pour le reste toujours i ne suit pas les Enrg, NON ?
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
29 oct. 2007 à 11:34
29 oct. 2007 à 11:34
bonne question ??? le tout est de savoir si le champs de table est trié dans l'ordre croissant ???
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
29 oct. 2007 à 11:47
29 oct. 2007 à 11:47
dsl, j'avais ton post précédent ...
Voilà comment passe :
Soit n: le numéro d'enreg
i=202 n=202 (puisque i=R) => rien ne se passe
i=203 n=203 = > rien ne se passe
i=204 n= 205, 204 est inexistant =>(ajouter 204 à la liste) ==>MovePrevious la boucle revient à 205 (le numero d'enregistrement donc 205 = 205 => rien ne se passe, sinon, il va aller à l'Enreg suivant 206 différent de 205 il va l'ajouter à la liste des chiffres manquants pourtant le 206 est existant.
Mais mon problème est que la boucle ne lit pas 201 qui est manuquant, j'espère que tu ma compris.
Soit n: le numéro d'enreg
i=202 n=202 (puisque i=R) => rien ne se passe
i=203 n=203 = > rien ne se passe
i=204 n= 205, 204 est inexistant =>(ajouter 204 à la liste) ==>MovePrevious la boucle revient à 205 (le numero d'enregistrement donc 205 = 205 => rien ne se passe, sinon, il va aller à l'Enreg suivant 206 différent de 205 il va l'ajouter à la liste des chiffres manquants pourtant le 206 est existant.
Mais mon problème est que la boucle ne lit pas 201 qui est manuquant, j'espère que tu ma compris.
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
29 oct. 2007 à 11:57
29 oct. 2007 à 11:57
J'ai compris le blème ...
Je vais créer le conteste sur une base et je tiens au courant ...
Je vais créer le conteste sur une base et je tiens au courant ...
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
29 oct. 2007 à 12:44
29 oct. 2007 à 12:44
voilà ce que j'ai trouvé comme soluce ... c'est pas top mais ça fonctionne
i = Qr.Fields(0)
If i > 1 And i < 100 Then i = 1
If i > 101 And i < 200 Then i = 101
If i > 201 And i < 300 Then i = 201
etc ...
While Not rst.EOF
If i <> Qr.Fields(0) Then
lstaud.AddItem i
Qr.MovePrevious
End If
Qr.MoveNext
i = i + 1
Wend
i = Qr.Fields(0)
If i > 1 And i < 100 Then i = 1
If i > 101 And i < 200 Then i = 101
If i > 201 And i < 300 Then i = 201
etc ...
While Not rst.EOF
If i <> Qr.Fields(0) Then
lstaud.AddItem i
Qr.MovePrevious
End If
Qr.MoveNext
i = i + 1
Wend
POLUX31,
J'essaye autrement et je reviens car si on a 1000000 d'enregistrements comment on va tester ça ?
J'essaye autrement et je reviens car si on a 1000000 d'enregistrements comment on va tester ça ?
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
29 oct. 2007 à 13:15
29 oct. 2007 à 13:15
dans ce cas il faut faire une fonction qui te retourne i selon le cas de figure ...
Je viens de la faire et ça marche ...
;o)
Je viens de la faire et ça marche ...
;o)
POLUX31, voilà je trouve ce qui suit :
Dim x
Private Function Trouver(i as integer,x as integer) as integer
If i > x And i < x + 99 Then i = x
End Function
je sais pas ?, normalement ça marche, quel ton avis ?
Dim x
Private Function Trouver(i as integer,x as integer) as integer
If i > x And i < x + 99 Then i = x
End Function
je sais pas ?, normalement ça marche, quel ton avis ?
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
29 oct. 2007 à 15:47
29 oct. 2007 à 15:47
Quelle est la valuer de X ?
Je ne comprends pas ....
Je ne comprends pas ....
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
29 oct. 2007 à 15:56
29 oct. 2007 à 15:56
pourquoi passer deux paramètres ? et j'aimerai voir à quel moment tu appelles ta fonction ... ?
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
29 oct. 2007 à 15:58
29 oct. 2007 à 15:58
Ah oui, j'oubliai le principal ... ta fonction ne retourne rien ... ;o)
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
29 oct. 2007 à 16:01
29 oct. 2007 à 16:01
oui ok, mais i alors ???