cs_lacomm
Messages postés298Date d'inscriptionlundi 14 juin 2004StatutMembreDernière intervention 5 juillet 2013
-
24 août 2010 à 14:45
cs_lacomm
Messages postés298Date d'inscriptionlundi 14 juin 2004StatutMembreDernière intervention 5 juillet 2013
-
26 août 2010 à 15:22
Hello
J'utilise un recordset que je parcours avec le code ci-dessous. Tout va très bien, sauf quand le premier et/ou le dernier enregistrement contiennent un champ vide: chaque ligne contient (champ x) une règle syntaxique dont les 4 éléments sont présents dans les autres champs.
champ x contient la règle: mot1 mot2 mot3 mot4
champ 1= mot1
champ 2= mot2
champ 3= mot3
champ 4= mot4
Mais quand le premier/dernier enregistrement contient une règle avec moins de 4 éléments et donc un champ vide au mois, ca boucle.
Do Until elvar(1).EOF
motVar1 rsCombi("Mot1"): élément(1) elvar(1)(motVar1)
txtmotcible = elvar(1)(motVar1)
Do Until elvar(2).EOF
motVar2 rsCombi("Mot2"): élément(2) elvar(2)(motVar2)
Do Until elvar(3).EOF
motVar3 rsCombi("Mot3"): élément(3) elvar(3)(motVar3)
Do Until elvar(4).EOF
motVar4 rsCombi("Mot4"): élément(4) elvar(4)(motVar4)
maCombi = rsCombi("Regle")
If NbElVar > 0 Then maCombi = Replace(maCombi, rsCombi("Mot1"), élément(1))
If NbElVar > 1 Then maCombi = Replace(maCombi, rsCombi("Mot2"), élément(2))
If NbElVar > 2 Then maCombi = Replace(maCombi, rsCombi("Mot3"), élément(3))
If NbElVar > 3 Then maCombi = Replace(maCombi, rsCombi("Mot4"), élément(4))
If rsCombi("Mot4") = " " Then Exit Do
elvar(4).MoveNext
Loop
If rsCombi("Mot3") = " " Then Exit Do
elvar(3).MoveNext: elvar(4).MoveFirst
Loop
If rsCombi("Mot2") = " " Then Exit Do
elvar(2).MoveNext: elvar(3).MoveFirst: elvar(4).MoveFirst
Loop
If rsCombi("Mot1") = " " Then Exit Do
elvar(1).MoveNext: elvar(2).MoveFirst: elvar(3).MoveFirst: elvar(4).MoveFirst
Loop
cs_Jack
Messages postés14007Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201578 24 août 2010 à 20:25
Salut
"ça boucle" ??
Commence par supprimer un éventuel "On Error Resume Next" qui pourrait masquer le vrai problème.
De quel ttpes sont tes "rsCombi", "elvar()" and Co ?
(comment sont-ils dimensionnés ?)
Ah oui : Tu jongles avec les .MoveFirst, donc ça boucle à cause de ce genre de chose.
Là, il n'y a que toi qui puisse comprendre ce que tu fais dans ce code. Je te conseille de déboguer (*) et de voir par où passe le programme et si c'est normal.
Pense à vérifier si ton champ est nul avant de l'utiliser et, par conséquent, à prendre les décisions qui s'imposent en tel cas, genre
If Not IsNull(monRecordSet.Fields("monChamp")) Then
(*) débogage :
F9 sur une ligne de code
Le programme s'y arrêtera au prochain passage
Survole avec la souris tes variables pour visualiser leur contenu, ou va dans la fenêtre de debogage (Ctrl-G) et tape
? maVariable
pour qu'elle s'inscrive dans la fenêtre.
F8 pour avancer d'une ligne de code
F5 pour continuer normalement
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
cs_lacomm
Messages postés298Date d'inscriptionlundi 14 juin 2004StatutMembreDernière intervention 5 juillet 20131 25 août 2010 à 15:59
en fait oui ca venait des champs: un champ modifié à la main directement dans la base access "boucle", alors qu'un champ saisi et inséré par l'application passe très bien
cs_Jack
Messages postés14007Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201578 25 août 2010 à 19:01
Tant mieux si tu as trouvé, mais je ne comprends toujours pas ce que sont rsCombi et elvar()
Tu nous dis qu'ils sont bien dimensionnés mais on ne sait pas en quoi !
rsCombi("Mot3"), dont le nom laisse à penser qu'il s'agit d'un RecordSet, voudrait dire que tu à des RecordSet indexés et sous forme d'une collection (puisque tu y accèdes par un nom)?
Très bizarre.
Si ton rsCombi n'est pas indexé, et pour accéder à un champ nommé "Mot3", la syntaxe est
rsCombi.Fields("Mot3")
Ne prends pas trop de raccourcis dans tes codes, tu finiras par avoir des soucis d'interprétation du compilateur.
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_lacomm
Messages postés298Date d'inscriptionlundi 14 juin 2004StatutMembreDernière intervention 5 juillet 20131 26 août 2010 à 15:22
oui en effet j'ai trouvé mais c'est pas pour autant que je comprends pourquoi ça marche..
En fait, une table est parcourue sur base des champs d'une autre table.
rsCombi est un recordset dont la taille est variable et dont les champs contiennent un champ qui contient une règle syntaxique du genre mot1 mot2 mot3 mot4, un champ qui contient le nombre d'élément de cette règle, qui varie de 1 à 4 (elvar), et des champs qui contiennent les éléments eux-mêmes, dans ce cas-ci "mot1" pour rsCombi.mot1 etc. La valeur mot1, mot2 de ces champs rsCombi.mot1,rsCombi.mot2 etc sert à la requête dans une autre table et donc la valeur mot1, est remplacée par les valeurs du champ elvar.mot1 etc.
Les recordsets sont "dimensionnés" à l'avance, si "dimensionné" veut dire définition du nombre de champs.