Vautre = ADO(rnd*40) :-) :-\

cs_doggy Messages postés 50 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 12 janvier 2004 - 10 janv. 2003 à 23:39
cs_hgrandsart Messages postés 45 Date d'inscription samedi 6 juillet 2002 Statut Membre Dernière intervention 4 décembre 2011 - 14 janv. 2003 à 09:26
Salut à tous !

je comprends pas bien ce qu'il se passe ... toute mon appli est liée à une base access, et tout fonctionne très bien, sauf cette procédure :-(

En fait, je n'ai aucune idée de ce qu'il peut se passer ... c'est comme si à un moment de la boucle il ne parvenait pas à lire la valeur contenue dans le champ ...
J'ai tenté de commenter le exit for, et il continue sans problème la suite sans se vautrer une seconde fois ...
Encore plus étonnant, des fois ça marche lorsqu'il lit un champ qu'il avait pas réussi à lire avant ...

Si quelqun avait une idée, ça serait super cool :-) je bloque lamentablement ...

voilà le code qui semble avoir quelques problèmes ...

For fa = 1 To 40

f2 = tabusr4(1, fa)
Datab.Recordset.Move f2
tri = Datab.Recordset("bonnereponse")
Datab.Recordset.MoveFirst

Select Case tri

Case "reponsea"
trint = 1

Case "reponseb"
trint = 2

Case "reponsec"
trint = 3

Case "reponsed"
trint = 4

Case Else
MsgBox ("valeur de tri :" + Str$(tri) + vbCrLf + "valeur de f2:" + Str$(f2) + vbCrLf + "valeur de fa :" + Str$(fa)), vbCritical, "Erreur lecture base de données !!!"

'Exit For

End Select

tabusr4(3, fa) = trint
Next fa

3 réponses

cs_hgrandsart Messages postés 45 Date d'inscription samedi 6 juillet 2002 Statut Membre Dernière intervention 4 décembre 2011
12 janv. 2003 à 00:20
hgrandsart

Bonjour doggy,

Quel est le mode d'ouverture de ton recordset?
Si c'est adOpenFowardOnly, qui signifie curseur à defilement avant (valeur par défaut) l'incrément se fait de 1 en 1
c'est à dire que ton prog au premier tour lit l'enregistrement n°1 puis le n° 2 puis d'un coup veut acceder à l'enregistrement 6
et la il aime pas du tout, Mais tu devrais avoir un beau message d'erreur, SAUF si quelque part dans ton prog tu as un ON ERROR RESUME NEXT ou GOTO MaGesstionDerreur qui n'a pas été désactivé par ON ERROR GOTO 0
Pour acceder à des Enr. <> de ton recordset utilise le curseur de type adOpenDynamic. Verifie que ton tableau renvoie bien une valeur Long Pour f2 dans 'Datab.Recordset.Move f2'.
Voila si le probléme persiste contacte moi on verra ce qu'on peut faire, mais regarde déja ça on ne sait jamais!

bonne prog @+
hgrandsart
0
cs_doggy Messages postés 50 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 12 janvier 2004
13 janv. 2003 à 22:37
Merci pour ta réponse.

En fait, j'ai réussi à m'en sortir sans trop de bobo ...
Je ne sais pas pourquoi, mais il semblerait que après avoir bougé sur l'enregistrement f2, mon prog veuille passer à la fiche suivante (qui est inexistante lorsqu'on est sur le dernier !!!) ... J'ai remédié au problème par un "on error resume next" qui ne pose ici pas de problème, et un datab.recordset.moveprevious (pas très propre, ok, mais ça marche :-p ) ...
Je suis néanmoins interessé par toute info là-dessus (je bosse pas souvent avec des bases de données, et ADO, je suis plutôt noob %-6 ) ... C'est normal qu'après un move il passe aussitôt à la fiche suivante ? (galère quand même !!!)

Dogg'
0
cs_hgrandsart Messages postés 45 Date d'inscription samedi 6 juillet 2002 Statut Membre Dernière intervention 4 décembre 2011
14 janv. 2003 à 09:26
hgrandsart

Bonjour Doggy

Plutot qu'un ON ERROR teste EOF pour savoir si tu es à la fin de ton recordset (BOF pour le début) Ex if Datab.recordset.eof = TRUE then (je fais ou je ne fais pas la suite)
Rappel: ce n'est pas parce que ton tableau f2 n'a plus de "Données" que tu es a la fin. c'est a dire,
si tu dimensionne ton tableau a 10 éléments et qu'il n'est chargé que de 6 éléments, dans ta boucle il lit les valeurs de 0 a 9 avec des valeurs "Vides" a partir de 7 jusqu'a la fin du tableau. On peut eviter ce probléme avec REDIM PRESERVE.
Pour ce qui est du move qui passe a l'enregistrement spécifié directement, je dirais que c'est la fonction essentielle de "move".
L'utilisation du controle data ADO c'est bien, mais les DLL's et le code c'est mieux (plus long mais plus Pro)
Tiens moi au courant et n'hesite pas à me poser tes questions.

bonne prog @+
0
Rejoignez-nous