IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Procédural MySQL Discussion :

Connecter Mysql avec ODBC en c++


Sujet :

SQL Procédural MySQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 25
    Points : 13
    Points
    13
    Par défaut Connecter Mysql avec ODBC en c++
    Bonjour,

    J'ai un gros problème depuis plusieurs mois dans mon projet (projet 4ème année d'école d'ingénieur, ca presse!!). Je developpe un logiciel qui convertit des fichiers de généalogie. On stocke les infos dans une base de données dans le soft. Actuellement, l'importation de fichiers dans une base PostgreSql fonctionne très bien, la connexion se fait grace à ODBC. En revanche, je n'arrive pas à me connecter à MySql avec ODBC. Le serveur se situe sur une machine linux, le developpement se fait sous windows, sous microsoft.NET et en c++.
    Voici le code de connexion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    // Valeur de retour
    int ret=DB_CONNECTION_ERREUR;
     
    // Creation environnement
    retcode = SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE, &env);
     
    // Environnement correct
    if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO){
        // On précise la version de ODBC utilisée
        retcode = SQLSetEnvAttr(env,SQL_ATTR_ODBC_VERSION,(void*)SQL  _OV_ODBC3,0);
        // Version correcte
        if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO){
           // Création environnement odbc
           retcode = SQLAllocHandle(SQL_HANDLE_DBC,env,&hdbc); 
           // Environnement correct
           if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO){
                    // Initialisation du tps de connexion a 5 s.
                    SQLSetConnectAttr(hdbc,SQL_LOGIN_TIMEOUT,(void *)5,0);
                    // String de connexion passée en paramètre
                    char strCon[TAILLE_REQ];
                    strcpy(strCon,ConstruireConnexion().c_str());
                    // Connexion à une BDD
                    retcode = SQLDriverConnect(hdbc,NULL,(SQLCHAR *) strCon,SQL_NTS, (SQLCHAR*)OutConnectString,sizeof(OutConnectString  ), &sqlInt,SQL_DRIVER_COMPLETE);
                    // Connexion BDD effectuée
                    if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO){
                                        ret=InitBDD();
                    }
           }
       }
    }
     
     
    string COdbcMySql::ConstruireConnexion(){
    //chaine de connexion que l'on passe
        //"DRIVER={MySQL ODBC 3.51 river};DATABASE=ife;SERVER=roi;
        //PORT=3306;UID=ife;PWD=********";
        string sRes = "";
        sRes += "DRIVER={";
        sRes += m_sDriver;
        sRes += "};DATABASE=";
        sRes += m_sDatabase;
        sRes += ";SERVER=";
        sRes += m_sServer;
        sRes += ";PORT=";
        sRes += m_sPort;
        sRes += ";UID=";
        sRes += m_sId;
        sRes += ";PWD=";
        sRes += m_sMdp;
        return sRes;
    }

    Quand on exécute, le return code vaut -1. Est-ce que quelqu'un aurait une idée ? Est-ce que ca peut provenir de la chaine de connexion qui n'est pas bonne (mauvais paramètres ou pas dans le bon ordre?)

    N'hésitez pas à me demander si vous avez besoin de plus de détails.

    J'ai vraiment besoin d'aide !!!

    Merci beaucoup !

  2. #2
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    Citation Envoyé par elodie35
    N'hésitez pas à me demander si vous avez besoin de plus de détails.
    Evidemment ! Quelle est le code et le message d'erreur ?

    Quand vous avez une erreur et pour la corriger il est bon d'identifier l'erreur au préalable.

    Je craque un peu là...
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  3. #3
    Débutant
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2004
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 452
    Points : 324
    Points
    324
    Par défaut
    salut


    Moi perso pour me connecter à une BDD depuis visual studio j'utilise la librairie ADOLib c'est extremement simple d'utilisation.
    Enfin bon


    essaye avec cette chaine de connexion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
     "DRIVER={MySQL ODBC 3.51 Driver};SERVER=data.domain.com;PORT=3306;DATABASE=myDatabase; USER=myUsername;PASSWORD=myPassword;OPTION=3;"
    verifie si tu n'est pas sur un nom de domaine au cas ou .....


    voila c'a pourra peu-etre t'aider

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    J'ai essayé avec ta chaine de connexion, ca ne marche toujours pas ! Pour le nom de domaine, aucun problème. Je me connecte en local sur une machine dans mon école.

    Sinon c'est quoi cette librairie ? Elle est payante ?

  5. #5
    Débutant
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2004
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 452
    Points : 324
    Points
    324
    Par défaut
    non elle est gratuite, moi je l'utilise pour des applications MFC + MySql
    et ca fonctionne nickel


    tu trouveras un post dans le forum par contre je me rappel plus exactement
    la section


    cependant en essayant d'acceder au site c'a n'a pas fonctionné.

    Cherche un peu sur google et au pire des cas contacte moi je te l'enverrai


    voila bon courage et bon TAF

  6. #6
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    Comment se comporte ton application quand le serveur est en rade ? Elle se referme sans dire un mot ?

    Je pense que ton algo doit prévenir l'utilisateur de l'erreur qu'il rencontre. Donc si tu récupérais le code d'erreur de ta tentative connexion et son message tu pourrais avoir des informations pour résoudre ton problème...

    Exemples :
    Serveur non trouvé => Vérifier le nom du serveur, les ports, les firewalls, les droits d'accès,
    Base inconnue => Le serveur est trouvé, mais cette base de données n'existe pas ou je n'ai pas les droits d'aller dessus.
    Login mdp incorrect => Le serveur est trouvé, mais j'ai fait une erreur de login et de mot de passe...
    Je transpose ton problème à celui de la voiture qui ne démarre pas. Tant que ne récupères pas le message d'erreur, tu es dans la situation suivante :
    Tu es allé chez le garagiste car ta voiture ne démarre pas. Mais tu ne sais pas si c'est parce que tu n'as pas trouver la voiture dans le garage (serveur non trouvé). Tu ne sais pas si c'est parce que tu utilises la mauvaise clef (mauvais login). Et tu ne sais pas si c'est parce que tu es assise au siège passager (mauvaise database)...

    Je mets des smileys juste pour dire que je ne râle pas
    Par contre, tu gagnerais du temps si ... enfin tu as compris
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Ben justement, j'arrive pas à récupérer le message d'erreur, je sais juste que la fonction renvoit -1. Comment je peux recupérer le message ?

  8. #8
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    Là je ne peux que te renvoyer à la documentation de ta bibliothèque. En VB, j'utilise un système similaire au tiens pour une migration de Sybase à MSSQL SERVER. Je regarderais les fonctions que j'utilisaient vendredi quand je serais de retour de déplacement. Mais ça ne doit pas être difficile de trouver la réponse à ta question dans la documentation des outils Visual. Ils sont particulièrement bien fait, je trouve.

    Tiens une recherche sur google avec le mot clef SQLDriverConnect me mène à SQLDriverConnect function (CLI) - (Expanded) Connect to a data source

    De là je trouve un lien vers :
    SQLError function

    Ces liens parlent de l'API générale, ça doit fonctionner en .NET et C++.

    A défaut cf. ta documentation.
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Voici mon message d'errreur :
    "[MySQL][ODBC 3.51 Driver]Invalid window handle for connection completion argument.

    Serait-ce un bug ????

  10. #10
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    Je suppose que ton code est devenu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // Creation environnement
    retcode = SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE, &env);
     
    // Environnement correct
    if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO){
       /*   ........................ */
    } else {
        MessageBox ( <a href="http://publib.boulder.ibm.com/infocenter/db2luw/v8/topic/com.ibm.db2.udb.doc/ad/r0000587.htm" target="_blank">SQLError</a> (....) )
    }
    Es-tu sûr de ton utilisation de SQLAllocHandle ? Le second et troisième argument m'étonne un peu. Mais là j'extrapole car je ne connais pas trop les fonctions que tu utilises...
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    C'est bon, le probleme est reglé. C'etait un probleme dans les paramètres de ma fonction SqlDriverConnect :
    retcode = SQLDriverConnect(hdbc,NULL,(SQLCHAR *) strCon,SQL_NTS, (SQLCHAR*)OutConnectString,sizeof(OutConnectString ), &sqlInt,SQL_DRIVER_COMPLETE);
    Le second paramètre de cette fonction est un handle de fenêtre (on a mis NULL, car n'ayant pas de fenêtre associé). Par contre, le dernier paramètre SQL_DRIVER_COMPLETE indique qu'il faut s'appuyer sur la fenêtre indiquée pour demander des informations complémentaires (mot de passe, utilisateur...). C'est deux paramètres étaient incompatibles => erreur.
    SQL_DRIVER_NOPROMPT à la place, c'est beaucoup mieux.

    En revanche, ce problème ne se posait pas en PostgreSql, d'où mes semaines de recherches !

    Merci bcp de m'avoir éclairé !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [c#] Connection MySQL avec MySQLDriverCS
    Par kiwi645 dans le forum Accès aux données
    Réponses: 7
    Dernier message: 19/07/2011, 12h27
  2. [WD12E] Connexion vers Mysql avec ODBC
    Par Hell dans le forum WinDev
    Réponses: 7
    Dernier message: 28/01/2009, 16h45
  3. [MySQL] aide pour connection mysql avec du php sur mon site web
    Par cuisto44000 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 23/09/2007, 00h30
  4. Connection mysql via ODBC sans login
    Par Aslan78 dans le forum C++Builder
    Réponses: 1
    Dernier message: 20/04/2007, 17h02
  5. connection mysql avec jsp
    Par magnetic dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 30/06/2006, 22h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo