HELP (je vais devenir fou) : Problème de recup de données MySQL
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 2019
-
12 avril 2007 à 11:57
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 2019
-
16 avril 2007 à 12:45
Bonjour,
J'ai un problème pour recupérer des données d'une base MySQL et je ne comprend pas ce qui pose problème (j'ai bien sure installé une base MySQL et un driver ODBC).
J'ai donc une base de données MySQL sur la quel je me connect et tente de récup des données. J'ai dévelopé un module de classe pour communiquer avec ma base (très inspirer d'un code trouver sur CodeS SourceS il y à quel que temps, merci à celui/celle qui l'à posté ici). Voila un bout du code de cette classe :
-------------------------------------------------------
Private connex As ADODB.Connection
Private Sub Class_Initialize()
Set connex = New ADODB.Connection
End Sub
Public Sub etablir_connec(ByRef Serveur As String, ByRef BaseDeDonnées As String, ByRef User As String, ByRef Password As String)
On Error GoTo Erreur
connex.CursorLocation = adUseServer
connex.Open "DRIVER={MySQL ODBC 3.51 Driver};SERVER=" & Serveur & ";DATABASE=" & BaseDeDonnées & ";USER=" & User & ";PASSWORD=" & Password & ";OPTION=" & 85 & "" 'lalala
Exit Sub
Erreur:
MsgBox "Impossible de trouver la base de données."
End Sub
Public Function requete(ByVal rs_sql As String, ByRef rs_sub As ADODB.Recordset) As Boolean
If connex.State = 0 Then
requete = False
Exit Function
End If
If connex.State = 1 Then
Set rs_sub = New ADODB.Recordset
rs_sub.ActiveConnection = connex
On Error GoTo Erreur
rs_sub.Open rs_sql, connex, adOpenDynamic, adLockOptimistic
If rs_sub.EOF Then
requete = False '*******************************************************************
Else
requete = True
End If
Exit Function
Erreur:
MsgBox "Une erreur c'est produite avec.... " & rs_sql
requete = False
End Function
Public Function EtatConnection() As Boolean
EtatConnection = connex.State
End Function
-------------------------------------------------------
Mes tables sont : Articles,Vecteur et AnalysesSpecifiques. Pour le momant seul AnalysesSpecifiques contient des données (3 ligne pour être exacte)
Un objet global "Connexion" est déclarer et base sur la classe d'ont j'ai mit le code plus haut.
Je me connect donc, à premierre vue pas de problème, la connection s'execute sans erreur, et la fonction EtatConnection (soit la valeur de connex.State) est à 1 (donc si je ne me trompe pas la connection est OK). Si j'execute la requette "SELECT COUNT(*) FROM AnalysesSpecifiques" l'objet passée à la fonction 'requete' contient la valeur "3". Donc j'ai bien 3 ligne de données dans cette base MAIS et c'est là ma question losque j'execute la requette "SELECT * FROM AnalysesSpecifiques" mon objet est vide et le compilo me dit que je ne peut pas faire "DonneesBdD.GetString(adClipString, -1, ";", "|", "NULL")" sur un objet fermer!!! Et en plus la fonction requete me retourne faux (valeur retourné pare la ligne marqué d'*). Voila le code que j'execute pour avoir des données :
--------------------------------------------------------
Dim RetourDonnees As ADODB.Recordset
Dim Donnees as String
if Connexion.requete("SELECT * FROM AnalysesSpecifiques", RetourDonnees) then
Donnees = RetourDonnees.GetString(adClipString, -1, ";", "|", "NULL")
else
msgbox "Erreur1"
endif
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 12 avril 2007 à 16:16
Je crois que tout ce qui me rester à faire est de
<strike>foutre</strike> mettre mon PC par la fenêtre (si quelqu'un est en dessous pendant ce temps et bas
temps pie) et dire à mon parton qu'un pigeon géant à voulut le prendre pour en
faire sont nit. Dangereux les OGM...
cs_Nicko11
Messages postés1141Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention19 septembre 20073 13 avril 2007 à 08:47
Salut,
je vois que tu es passé au MySQL et que tu as encore des soucis. J'en suis désolé surtout que tu ne semblais pas loin de la solution avec ton ancienne base.
As tu essayé le bout de prog que je t'ai filé pour l'affichage des tables pour voir si ta connexion fonctionne?
J'ai vu aussi que tu ne mettais pas de "rs.CursorLocation = adUseServer". De plus, moi j'utilise toujours "adUseClient" mais je sais pas pourquoi en fait. Encore un chose, l'utilisateur que tu entres, a t il le droits de modifier les données de la base.
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 13 avril 2007 à 09:38
Bonjour,
Oui j'avais récup les nom des bases en PostGres (j'ai quand même gardé le code sous le coude au cas où en final quelqu'un aurais une solution à me faire tester, moi je ne sais plus quois faire, j'ai fais des testes supplémentaire et je vais posté ça sur l'autre topic peut être que ça inspirera quelqu'un).
Je n'ai pas fais le teste avec MySQL, mais vue que j'arrive à insérer des données dans ma base la connection est OK. De part et d'autre (sois sous MySQL et PostGres) je me connecte à mes base avec des logiciels tiere ("DBACentral for MySQL" pour MySQL et "ISQL for PgSQL" pour PostGres) et mes requête s'execute sans problème avec les login/password que j'utilise dans mon apli donc ce n'est pas ça le problème.
Je vient de faire le teste avec "adUseClient" et une nouvelle erreur me remonte :
-------------------------
Run-time error '-2147217887 (80040e21)':
Une opération en plusieurs étapes a généré des erreurs. Vérifiez chaque valeur d'état.
-------------------------
Heeeeee Quois, ques que ca veut dire encors ça???
Du coup j'aitenté de détruire mon objet entre chaque appel de ma fonction requete et cette erreur apparais toujours???
J'ai même testé de déconnecté mon appli entre chaque requete et ça ne marche pas non plus (toujour en supprimant l'objet "ADODB.Recordset") mais rien!!!
Une idée???
Amicalement
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Nicko11
Messages postés1141Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention19 septembre 20073 13 avril 2007 à 10:18
OK, je prefererai que tu fasses un mini projet dans lequel tu mets juste la connexion connex et le jeu d'enregistrment rs_sub :
Ensuite, tu me dis que ta requete fonctionne sous tes soft tiers. Donc, si cela se trouve, ta connexion n'est pas fausse en tant que connexion, mais peut n'est elle pas appropriée par rapport a ce que tu dois faire (paramètre manquant). Je ne connais pas bien les autres bases que access mais j'ai jamais vu une connexion comme ca.
Tu as un paramètre driver que je n'ai jamais vu, j'ai plutot la notion de provider (tape rs.sub. et normalement c'est une propriété de l'objet). Je regarderais sur VBFrance comment ils font pour se connecter en MySQL.
Pour finir, avec ton logiciel tiers, n'as tu pas un moyen de connaitre la connexion qu'il emploie.
Peut etre que je te dis de la mer.. mais j'essaie de voir tous les chemins possibles car une connexion et une requete qui fonctionnent separemment et pas ensemble, c'est bizarre.
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 16 avril 2007 à 12:45
Bonjour, désol pour le temps à répondre mais j'ai dù faire autre chose en attendant (connection à une base PostGres) je vais bientôt me remétre à ce problème.
Nicko11 : Sais tu ou trouver une liste de provider (tu m'a fais découvir cette façon de ce connecté)? Plus rapide qu'une connection par driver? Tu me dis de tapé "rs.sub.", heeeeee, où ça??? rs c'est quel objet???
Amicalement