demande de précisions VB & Mysql Via ODBC - VB/VBA/VBS - Programmation
Marsh Posté le 16-05-2004 à 09:16:09
bonjour,
essaies-çà :
Do While Not oRst.EOF
nb = nb + 1
ReDim Preserve tonTab(nb)
tonTab(nb-1) = oRst!ITLCATELLIB
oRst.MoveNext
Loop
Ca peut peut-être fonctionner dans ton cas...
Salut
Marsh Posté le 16-05-2004 à 11:45:09
attention, le Redim donne au tableau l'indice du dernier élément et non le nombre d'éléments, sur une base de 0 à n-1. Tu auras donc un nb = 0 en début de code, et:
Code :
|
Marsh Posté le 16-05-2004 à 12:06:16
Bien sûr!
Faut pas oublier de déclarer les variables et les initialiser :
Dim tonTab() as string ' ou autre type
nb as long
nb = 0
oRst.MoveFirst
tonTab(nb) = oRst!ITLCATELLIB
oRst.MoveNext
et seulement après :
Do While Not oRst.EOF
nb = nb + 1
ReDim Preserve tonTab(nb)
tonTab(nb) = oRst!ITLCATELLIB
oRst.MoveNext
Loop
Je crois que c'est çà mais bon çà fait un moment que je n'ai pas manipulé les recordsets !!
Marsh Posté le 16-05-2004 à 12:10:11
l'incrémentation du nb à la fin de la boucle et c'est bon pour moi.
Marsh Posté le 16-05-2004 à 12:13:50
Pas dans ce cas puisqu'il doit être incrémenté avant le redim et avant l'affectation
Marsh Posté le 16-05-2004 à 12:25:45
Trés bien j'ai bien noté la marche à suivre mais mainetant il y a un autre probléme...
lors de l'execution je reçoit une fentre de debug avec le message suivant:
cette opération n'est pas autorisée si l'objet est fermé
en cliquant sur debug la ligne surlignée en jaune est
Do While Not oRst.EOF
voivi le contexte dans lequel ce code est inséré:
' Initialisation de la connection
Set oCon = New connection
Call oCon.Open(strConnect)
' Initialisation d'une requête
strSql = request
Set oRst = New Recordset
' adOpenForwardOnly -> meilleur choix pour un parcours du recordset du début à la fin
' adCmdText -> on précise qu'il s'agit d'une requête
Call oRst.Open(strSql, oCon, adOpenForwardOnly, adLockReadOnly, adCmdText)
'------------------------AFFICHAGE DES RESULTATS----------------------
Dim avancement As Integer
' Bouclage sur le recordset
Do While Not oRst.EOF
avancement = avancement + 1
' Output dans l'immediate window
mysqlansers(avancement) = oRst!ITLCATELLIB
oRst.MoveNext
Loop
' Fermeture propre des connexions et destruction des objets
oRst.Close
Set oRst = Nothing
oCon.Close
Set oCon = Nothing
End Sub
Marsh Posté le 16-05-2004 à 12:29:34
Pour çà, j'aurai fait un truc du genre :
While oRst.EOF = false
...
Wend
J'aime pas trop les Loop !!
Marsh Posté le 16-05-2004 à 12:30:39
à moins qu'il y ait eu plantage sur l'ouverture du recordset (méthode Open), je ne vois pas comment...
Marsh Posté le 16-05-2004 à 12:31:07
les tests booleens avec des comparaisons, c'est mal
Marsh Posté le 16-05-2004 à 12:36:08
ReplyMarsh Posté le 16-05-2004 à 12:43:58
While oRst.EOF = false
-> While Not oRst.EOF
Marsh Posté le 16-05-2004 à 12:53:43
oRst.EOF est par définition un booléen dont la valeur par défaut est true
écrire While Not oRst.EOF
c'est l'équivalent de While Not oRst.EOF = true
et donc de While oRst.EOF = false
Où est le mal ?
Marsh Posté le 16-05-2004 à 12:56:43
le Not est fait pour ça justement. J'ai de plus remarqué chez la majorité des développeurs un certain dégoût vis-à-vis des comparaisons de booléens, et avec raison: c'est la manière naturelle de faire. Les True/False ne doivent servir qu'aux affectations.
Enfin, la valeur d'un booléen est False par défaut (d'autant plus si le recordset retourné est vide).
Marsh Posté le 16-05-2004 à 00:27:16
bonjour,
J'ai fait un petit projet vb 6.0 entreprise qui doit fonctionner avec mysql mais mon probléme est le suivant:
j'arrive a créer ou retirer des bases/tables/enregistrements sans probléme mais je ne c pas comment recupérer avec VB la réponse aux questions que je pe poser a la base de données (je c lui demander mais je ne c pas comment recuperer la reponse a la requete...
J'utilise le code source propose par Drasche que je profite pour remercier sincerement !) sur ce forum:
http://forum.hardware.fr/hardwaref [...] 3534-1.htm
J'ai cru comprendre que le code de reception des données etait:
Do While Not oRst.EOF
' Output dans l'immediate window
Debug.Print oRst!ITLCATELLIB
oRst.MoveNext
Loop
mais dans mon cas les reponses ne doivent pas s'afficher ds l'imediatewindow mais se stocker ds un tableau !!
A ce propos j'aimerais aussi savoir comment retourner le nombre de reponses a une requete afin de dimenssionner mon tableau correctement
Merci d'avance pour vos reponses !