demande de précisions VB & Mysql Via ODBC

demande de précisions VB & Mysql Via ODBC - VB/VBA/VBS - Programmation

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 !

Reply

Marsh Posté le 16-05-2004 à 00:27:16   

Reply

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
 
 

Reply

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 :
  1. tonTab(nb) = oRst!ITLCATELLIB

Reply

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 !!
 
 

Reply

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.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

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

Reply

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
     :hello:  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
 

Reply

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 !!

Reply

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...


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 16-05-2004 à 12:31:07    

les tests booleens avec des comparaisons, c'est mal :o


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 16-05-2004 à 12:31:07   

Reply

Marsh Posté le 16-05-2004 à 12:36:08    

drasche a écrit :

les tests booleens avec des comparaisons, c'est mal :o


 
??

Reply

Marsh Posté le 16-05-2004 à 12:43:58    

While oRst.EOF = false  
 
-> While Not oRst.EOF


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

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 ?
 
 

Reply

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).


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 16-05-2004 à 13:02:32    

A toi de voir IcemaN_BX...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed