Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/05/2006, 16h39   #1
Invité régulier
 
Inscription : avril 2006
Messages : 25
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : avril 2006
Messages : 25
Points : 8
Points : 8
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 :
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 !
elodie35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2006, 17h08   #2
Membre Expert
 
Avatar de Alexandre T
 
Inscription : mai 2002
Messages : 1 022
Détails du profil
Informations personnelles :
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : mai 2002
Messages : 1 022
Points : 1 123
Points : 1 123
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 T.

PHP5/MySQL5 Codes prêts à l'emploi
30 projets avec codes sources complets pour créer diaporamas photos, chat, arbre généalogique, statistiques de visites, création de graphiques, moteur de recherche, Sudoku etc...

Mes articles
Alexandre T est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2006, 17h16   #3
Débutant
 
Homme
Inscription : janvier 2004
Messages : 435
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : janvier 2004
Messages : 435
Points : 245
Points : 245
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 :
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
moulefrite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2006, 17h58   #4
Invité régulier
 
Inscription : avril 2006
Messages : 25
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : avril 2006
Messages : 25
Points : 8
Points : 8
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 ?
elodie35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2006, 18h05   #5
Débutant
 
Homme
Inscription : janvier 2004
Messages : 435
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : janvier 2004
Messages : 435
Points : 245
Points : 245
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
moulefrite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2006, 18h14   #6
Membre Expert
 
Avatar de Alexandre T
 
Inscription : mai 2002
Messages : 1 022
Détails du profil
Informations personnelles :
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : mai 2002
Messages : 1 022
Points : 1 123
Points : 1 123
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 :
Citation:
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 T.

PHP5/MySQL5 Codes prêts à l'emploi
30 projets avec codes sources complets pour créer diaporamas photos, chat, arbre généalogique, statistiques de visites, création de graphiques, moteur de recherche, Sudoku etc...

Mes articles
Alexandre T est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2006, 18h32   #7
Invité régulier
 
Inscription : avril 2006
Messages : 25
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : avril 2006
Messages : 25
Points : 8
Points : 8
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 ?
elodie35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2006, 20h53   #8
Membre Expert
 
Avatar de Alexandre T
 
Inscription : mai 2002
Messages : 1 022
Détails du profil
Informations personnelles :
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : mai 2002
Messages : 1 022
Points : 1 123
Points : 1 123
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 T.

PHP5/MySQL5 Codes prêts à l'emploi
30 projets avec codes sources complets pour créer diaporamas photos, chat, arbre généalogique, statistiques de visites, création de graphiques, moteur de recherche, Sudoku etc...

Mes articles
Alexandre T est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2006, 15h35   #9
Invité régulier
 
Inscription : avril 2006
Messages : 25
Détails du profil
Informations personnelles :
Âge : 28

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

Serait-ce un bug ????
elodie35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2006, 17h07   #10
Membre Expert
 
Avatar de Alexandre T
 
Inscription : mai 2002
Messages : 1 022
Détails du profil
Informations personnelles :
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : mai 2002
Messages : 1 022
Points : 1 123
Points : 1 123
Je suppose que ton code est devenu :
Code :
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 T.

PHP5/MySQL5 Codes prêts à l'emploi
30 projets avec codes sources complets pour créer diaporamas photos, chat, arbre généalogique, statistiques de visites, création de graphiques, moteur de recherche, Sudoku etc...

Mes articles
Alexandre T est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2006, 18h53   #11
Invité régulier
 
Inscription : avril 2006
Messages : 25
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : avril 2006
Messages : 25
Points : 8
Points : 8
C'est bon, le probleme est reglé. C'etait un probleme dans les paramètres de ma fonction SqlDriverConnect :
Citation:
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é !
elodie35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h15.


 
 
 
 
Partenaires

Hébergement Web