HELP (je vais devenir fou) : Problème de recup de données MySQL

Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 - 12 avril 2007 à 11:57
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 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

----------------------------------------------------------

Le message box s'execute alors (message "Erreur1" bien sure)
Or je rapel que si j'execute
--------------------------------------------------------

Dim RetourDonnees As ADODB.Recordset

Dim Donnees as String

if Connexion.requete("SELECT COUNT(*) FROM AnalysesSpecifiques", RetourDonnees) then

    Donnees = RetourDonnees.GetString(adClipString, -1, ";", "|", "NULL")

else

    msgbox "Erreur1"

endif

----------------------------------------------------------
alors j'ai la valeur 3 dans Donnees.

Je ne comprand plus rien moi HELP!!!
Je pense avoir été sufisament précis mais si vous avez la moindre question posé là.

PS : Si quel qu'un sais à quois serv l'opion à 85 (ligne avec le commentaire 'lalala) je serais contant de le savoir.
Merci
Amicalement
A voir également:

6 réponses

Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
12 avril 2007 à 15:21
Heeeeeee
Je me sens tout seul

Pouriez vous testé si ce code est fonctionel chez vous et me dire si vous avez une erreur ou si tout fonctione bien.

Merci
Amicalement
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
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...


Ou alors je saute<!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600"
o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f"
stroked="f">
<v:stroke joinstyle="miter"/>
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0"/>
<v:f eqn="sum @0 1 0"/>
<v:f eqn="sum 0 0 @1"/>
<v:f eqn="prod @2 1 2"/>
<v:f eqn="prod @3 21600 pixelWidth"/>
<v:f eqn="prod @3 21600 pixelHeight"/>
<v:f eqn="sum @0 0 1"/>
<v:f eqn="prod @6 1 2"/>
<v:f eqn="prod @7 21600 pixelWidth"/>
<v:f eqn="sum @8 21600 0"/>
<v:f eqn="prod @7 21600 pixelHeight"/>
<v:f eqn="sum @10 21600 0"/>
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
<o:lock v:ext="edit" aspectratio="t"/>
</v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" alt="" style='width:24pt;
height:24pt'/><![endif]--><!--[if !vml]--><!--[endif]--><!--[if gte vml 1]><v:shape id="_x0000_i1026"
type="#_x0000_t75" alt="" style='width:24pt;height:24pt'/><![endif]--><!--[if !vml]--><!--[endif]-->
<!--[if gte vml 1]><v:shape id="_x0000_i1027" type="#_x0000_t75"
alt="" style='width:24pt;height:24pt'/><![endif]--><!--[if !vml]--><!--[endif]-->AIDEZ MOI JE CRAQUE
!!!



Un simple message de soutien serais le bien venue





PS : J'ai encor tester mes requête SQL (avec "DBACentral
for MySQL") et évidemment elle fonctionne toute!!!!
Comme si ça allait être simple

.






Amicalement
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
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.

A+
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
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.

connex.Open "DRIVER={MySQL ODBC 3.51 Driver};SERVER=" & Serveur & ";DATABASE=" & BaseDeDonnées & ";USER=" & User & ";PASSWORD=" & Password & ";OPTION=" & 85 & "" 'lalala

La mienne donne ca (avec access) :

acn.Open "Provider=Microsoft.Jet.OLEDB.4.0;User ID=Connexion;Password =" & MDP & ";Data Source=" & Chemin_DataSource & ";Jet OLEDB:System database=" & Chemin_System_DataBase & ";Jet OLEDB:Registry Path=" & Chemin_Registry_Path & ";"

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.
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
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
0
Rejoignez-nous