A voir également:
- C++ sql
- Récupération serveur sql - Télécharger - Gestion de données
- Logiciel sql - Télécharger - Bases de données
- Dupliquer une table sql ✓ - Forum Programmation
- Sql commence par ✓ - Forum Webmastering
- Sql pix - Forum Python
17 réponses
Bonsoir,
Pour tout dire je connais mal le C++.
Toutefois :
stmt = con->createStatement();
> createStatement() est appelé ici sans arguments - il attend une requête SQL normalement du type createStatement("SELECT ... FROM...") par exemple.
salutations.
Pour tout dire je connais mal le C++.
Toutefois :
stmt = con->createStatement();
> createStatement() est appelé ici sans arguments - il attend une requête SQL normalement du type createStatement("SELECT ... FROM...") par exemple.
salutations.
Capry
Messages postés
21
Date d'inscription
mardi 17 mars 2009
Statut
Membre
Dernière intervention
12 avril 2009
11 avril 2009 à 22:57
11 avril 2009 à 22:57
Non je ne crois pas que le constructeur de classe attende quelconque argument. Merci de ta réponse quand même :S .
Bonjour,
"Non je ne crois pas que le constructeur de classe attende quelconque argument"
Faux :
En C++, createStatement() est peut être un constructeur sans arguments mais la classe possède une surcharge qui attend un argument de type "chaine de requête SQL - alors peut être que vos exemples viennent de Java car en effet dans ce langage il y a bien surcharge de constructeurs pour cette classe...
Exemple en C++ qui montre un appel du constructeur avec passage de paramètres :
https://www.dreamincode.net/forums/topic/30799-how-to-connect-c-with-oracle/
-->
blabla...
............................................................
stmt = conn->createStatement(sqlString);
............................................................
resultSet = stmt->executeQuery();
...........................................................
stmt->closeResultSet(resultSet);
...........................................................
conn->terminateStatement(stmt);
L'intérêt d'un createStatement est de littéralement "préparer une requête" sinon j'en vois pas l'intérêt.
Renseignez vous et relisez votre cours C++ sur les fonctions ODBC s'il vous plait car ça m'intéresserait d'avoir des infos. sur cette classe - je n'ai pas vu de didacticiel en fonctions ODBC pour C++ sur le Net.
amicalement.
"Non je ne crois pas que le constructeur de classe attende quelconque argument"
Faux :
En C++, createStatement() est peut être un constructeur sans arguments mais la classe possède une surcharge qui attend un argument de type "chaine de requête SQL - alors peut être que vos exemples viennent de Java car en effet dans ce langage il y a bien surcharge de constructeurs pour cette classe...
Exemple en C++ qui montre un appel du constructeur avec passage de paramètres :
https://www.dreamincode.net/forums/topic/30799-how-to-connect-c-with-oracle/
-->
blabla...
............................................................
stmt = conn->createStatement(sqlString);
............................................................
resultSet = stmt->executeQuery();
...........................................................
stmt->closeResultSet(resultSet);
...........................................................
conn->terminateStatement(stmt);
L'intérêt d'un createStatement est de littéralement "préparer une requête" sinon j'en vois pas l'intérêt.
Renseignez vous et relisez votre cours C++ sur les fonctions ODBC s'il vous plait car ça m'intéresserait d'avoir des infos. sur cette classe - je n'ai pas vu de didacticiel en fonctions ODBC pour C++ sur le Net.
amicalement.
Re,
Je vois que vous utilisez une API MySql que je ne connais pas - privilégiez peut être les fonctions standards ODBC comme une internaute vous l'avez proposé.
http://www.commentcamarche.net/forum/affich 11575088 c probleme du driver sql?#8
amicalement.
Je vois que vous utilisez une API MySql que je ne connais pas - privilégiez peut être les fonctions standards ODBC comme une internaute vous l'avez proposé.
http://www.commentcamarche.net/forum/affich 11575088 c probleme du driver sql?#8
amicalement.
Capry
Messages postés
21
Date d'inscription
mardi 17 mars 2009
Statut
Membre
Dernière intervention
12 avril 2009
12 avril 2009 à 10:46
12 avril 2009 à 10:46
Non en c++ j'ai déjà essayé on ne peut pas faire :
stmt = con->createStatement(std::string("USE database"));
Le compilateur répond que la seule fonction possible est : virtual sql::Statement* sql::Connection::createStatement().
Une requête ne peux pas être directement être envoyée par le constructeur. De plus dans les exemples il indique bien de faire
stmt = con->createStatement();
et plus tard :
stmt = execute->createStatement("USE database");
stmt = con->createStatement(std::string("USE database"));
Le compilateur répond que la seule fonction possible est : virtual sql::Statement* sql::Connection::createStatement().
Une requête ne peux pas être directement être envoyée par le constructeur. De plus dans les exemples il indique bien de faire
stmt = con->createStatement();
et plus tard :
stmt = execute->createStatement("USE database");
Re,
bizarre vos fonctions....
1-
Pouvez vous nous donner un lien vers la documentation fournie avec votre API MySql s'il vous plait ??..
Ça n'a pas l'air standard car que ce soit en Java ou en ODBC MySql standard C++ (fourni par MySql AB), createStatement() a communément une surcharge de constructeur comme je vous l'ai indiquée qui permet de passer les ordres SQL directement en statement mais bon ça n'explique pas pourquoi votre statement plante à l'exécution avec votre API.
2-
stmt = execute->createStatement("USE database");
... Ça m'étonne beaucoup et c'est surement une erreur de votre part en recopiant votre code fourni car ça serait plutôt ceci dans votre cas en suivant la logique imposée par vos fonctions MySql :
stmt = con->createStatement();
resultSet = stmt->executeQuery("USE database");
Dans tous les cas je vais me renseigner - quel est l'éditeur de votre API MySql utilisée ici svp ?..
Merci et a+.
bizarre vos fonctions....
1-
Pouvez vous nous donner un lien vers la documentation fournie avec votre API MySql s'il vous plait ??..
Ça n'a pas l'air standard car que ce soit en Java ou en ODBC MySql standard C++ (fourni par MySql AB), createStatement() a communément une surcharge de constructeur comme je vous l'ai indiquée qui permet de passer les ordres SQL directement en statement mais bon ça n'explique pas pourquoi votre statement plante à l'exécution avec votre API.
2-
stmt = execute->createStatement("USE database");
... Ça m'étonne beaucoup et c'est surement une erreur de votre part en recopiant votre code fourni car ça serait plutôt ceci dans votre cas en suivant la logique imposée par vos fonctions MySql :
stmt = con->createStatement();
resultSet = stmt->executeQuery("USE database");
Dans tous les cas je vais me renseigner - quel est l'éditeur de votre API MySql utilisée ici svp ?..
Merci et a+.
Re,
OK pour le createStatement - en C++ ODBC MySql de chez MySql AB : on passe les ordres SQL dans le prepareStatement()....
J'ai relu votre source :
Je pense que vous mélangez des fonctions associées à votre ancienne API et l'API officielle et ça plante après le driver.
Donc :
1-
Virez les include associés à votre ancienne librairie et gardez mysql_driver.h de chez MySql AB - ça peut en effet poser des conflits.
2-
Utilisez plutôt get_mysql_driver_instance(); ==> ça vient peut être de là je pense.
Sources et examples : http://forge.mysql.com/wiki/Connector_C++#Getting_Started:_Usage_Examples
amicalement.
OK pour le createStatement - en C++ ODBC MySql de chez MySql AB : on passe les ordres SQL dans le prepareStatement()....
J'ai relu votre source :
Je pense que vous mélangez des fonctions associées à votre ancienne API et l'API officielle et ça plante après le driver.
Donc :
1-
Virez les include associés à votre ancienne librairie et gardez mysql_driver.h de chez MySql AB - ça peut en effet poser des conflits.
2-
Utilisez plutôt get_mysql_driver_instance(); ==> ça vient peut être de là je pense.
Sources et examples : http://forge.mysql.com/wiki/Connector_C++#Getting_Started:_Usage_Examples
amicalement.
Re,
Avec l'ensemble des éléments donnés et en me basant sur les exemples fournis par la doc. de MySql AB, votre code pourrait être le suivant et il n'y a aucune raison que ça plante encore (du moins si vous avez bien installée le bon connecteur) :
(les mises à jour significatives sont en gras)
Avec l'ensemble des éléments donnés et en me basant sur les exemples fournis par la doc. de MySql AB, votre code pourrait être le suivant et il n'y a aucune raison que ça plante encore (du moins si vous avez bien installée le bon connecteur) :
(les mises à jour significatives sont en gras)
#include <cstdlib> #include <iostream> #include <sstream> #include <string> #include <stdexcept> #include <driver/mysql_driver.h> using namespace std; int main(int argc, char **argv) { sql::mysql::MySQL_Driver *driver; sql::Connection *con; sql::Statement *stmt driver = sql::mysql::get_mysql_driver_instance(); con = driver->connect("tcp://127.0.0.1:3306", "Capry", "mdp"); if (!con) { cout<<"Impossible de se connecter"<<endl; } else { cout<<"Connecter"<<endl; } stmt = con->createStatement(); stmt->execute("USE DATABASE"); delete stmt; delete con; system("PAUSE"); return EXIT_SUCCESS; }
Capry
Messages postés
21
Date d'inscription
mardi 17 mars 2009
Statut
Membre
Dernière intervention
12 avril 2009
12 avril 2009 à 12:28
12 avril 2009 à 12:28
merci pour tes réponses,
Je pense que ton code pourrait marche, mais lorsque je l'insère voilà l'erreur du compilateur :
[Linker error] undefined reference to `_imp___ZN3sql5mysql25get_mysql_driver_instanceEv'
A quoi ce peut-être dû ?
Je pense que ton code pourrait marche, mais lorsque je l'insère voilà l'erreur du compilateur :
[Linker error] undefined reference to `_imp___ZN3sql5mysql25get_mysql_driver_instanceEv'
A quoi ce peut-être dû ?
Re,
Le compilateur a bien trouvé vos include.
Mais là c'est un simple problème au niveau du "Linker" du compilateur (dernière phase de la compilation) --> il faut lui indiquer une référence à la bonne librairie (.lib) et non plus la librairie associée à votre ancienne API.
Si vous utilisez Visual Studio :
- Propriétés du projet.
- Propriétés de Configuration/Linker/Input.
- Ajouter dans Additional Depedencies le nom de votre librairie .lib associée à votre connecteur MySql fourni et que vous avez installé sur votre machine.
A+.
Le compilateur a bien trouvé vos include.
Mais là c'est un simple problème au niveau du "Linker" du compilateur (dernière phase de la compilation) --> il faut lui indiquer une référence à la bonne librairie (.lib) et non plus la librairie associée à votre ancienne API.
Si vous utilisez Visual Studio :
- Propriétés du projet.
- Propriétés de Configuration/Linker/Input.
- Ajouter dans Additional Depedencies le nom de votre librairie .lib associée à votre connecteur MySql fourni et que vous avez installé sur votre machine.
A+.
Re,
J'ai oublié aussi de vous dire qu'il faut aussi indiquer à votre compilateur comment trouver le répertoire de vos librairies .lib :
Visual Studio :
- Outils/Options.
- VC++ Directories.
- Sélectionner les "Libraries Files" dans le menu déroulant.
- Enfin, entrez une référence au chemin d'accès vers la libraire où le compilateur trouvera la .lib comme je vous l'ai expliqué dans mon message précédent.
Note : par exemple, moi cette librairie s'appelle libmysql.lib mais... c'est une librairie pour du langage C (:>) ... et oui ça date un peu.
J'ai oublié aussi de vous dire qu'il faut aussi indiquer à votre compilateur comment trouver le répertoire de vos librairies .lib :
Visual Studio :
- Outils/Options.
- VC++ Directories.
- Sélectionner les "Libraries Files" dans le menu déroulant.
- Enfin, entrez une référence au chemin d'accès vers la libraire où le compilateur trouvera la .lib comme je vous l'ai expliqué dans mon message précédent.
Note : par exemple, moi cette librairie s'appelle libmysql.lib mais... c'est une librairie pour du langage C (:>) ... et oui ça date un peu.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Capry
Messages postés
21
Date d'inscription
mardi 17 mars 2009
Statut
Membre
Dernière intervention
12 avril 2009
12 avril 2009 à 13:19
12 avril 2009 à 13:19
D'accord, moi ma librairie c'est "mysqlcppconn.lib" mais le problème c'est que je suis sous dev c++ et ce n'est pas la même interface :S.
Re,
(....) si tu a pu modifier tes références vers tes include, ça devrait pas poser de problèmes pour tes .lib non..??....
Copie ton mysqlcppconn.lib dans le dossier lib de DevC++, celui-ci se trouvant (normalement) en C:\Dev-Cpp\lib.
Puis, Projets/Options du Projet :
- Onglet Paramètres.
- Éditeur de liens --> Ajouter Fichier --> Tu sélectionnes donc ta mysqlcppconn.lib qui sera utilisée pour la compilation.
Essaye de recompiler ensuite.
amicalement.
(....) si tu a pu modifier tes références vers tes include, ça devrait pas poser de problèmes pour tes .lib non..??....
Copie ton mysqlcppconn.lib dans le dossier lib de DevC++, celui-ci se trouvant (normalement) en C:\Dev-Cpp\lib.
Puis, Projets/Options du Projet :
- Onglet Paramètres.
- Éditeur de liens --> Ajouter Fichier --> Tu sélectionnes donc ta mysqlcppconn.lib qui sera utilisée pour la compilation.
Essaye de recompiler ensuite.
amicalement.
Capry
Messages postés
21
Date d'inscription
mardi 17 mars 2009
Statut
Membre
Dernière intervention
12 avril 2009
12 avril 2009 à 14:09
12 avril 2009 à 14:09
eh bien en fait ça je l'avais déjà fait, donc forcement il me donnent la même erreur :S.
Capry
Messages postés
21
Date d'inscription
mardi 17 mars 2009
Statut
Membre
Dernière intervention
12 avril 2009
12 avril 2009 à 14:14
12 avril 2009 à 14:14
bah à la compilation,
Il y a toujours le :
[Linker error] undefined reference to `_imp___ZN3sql5mysql25get_mysql_driver_instanceEv'
dû au mysql_driver
Il y a toujours le :
[Linker error] undefined reference to `_imp___ZN3sql5mysql25get_mysql_driver_instanceEv'
dû au mysql_driver
Re,
1-
Code en entête de ton code ceci :
#pragma comment(lib,"mysqlcppconn.lib")
2-
Ajoute l'option -lcomdlg32 aux options du linker.
Ça permet de forcer le compilateur à utiliser la librairie désignée dans le #pragma.
3- Recopie ton code et envoie le nous.
Essaye de recompiler - je vais voir si je peux trouver d'autres infos sur cette librairie.
A+.
1-
Code en entête de ton code ceci :
#pragma comment(lib,"mysqlcppconn.lib")
2-
Ajoute l'option -lcomdlg32 aux options du linker.
Ça permet de forcer le compilateur à utiliser la librairie désignée dans le #pragma.
3- Recopie ton code et envoie le nous.
Essaye de recompiler - je vais voir si je peux trouver d'autres infos sur cette librairie.
A+.
Re,
J'oubliais :
mysqlcppconn.lib --> il faut copier la nouvelle librarie qui a été livrée à l'installation de ton driver MySql ODBC C++ tel qu'il fourni par MySql AB - pas l'ancienne libraire de ta vieille API qui plantait !!...
En effet, cette libraire a peut être le même nom que l'ancienne mais n'a rien à voir..
J'oubliais :
mysqlcppconn.lib --> il faut copier la nouvelle librarie qui a été livrée à l'installation de ton driver MySql ODBC C++ tel qu'il fourni par MySql AB - pas l'ancienne libraire de ta vieille API qui plantait !!...
En effet, cette libraire a peut être le même nom que l'ancienne mais n'a rien à voir..
Re,
Je me suis renseigné (hé hé..) :
Je crois que c'est toi sur ce forum (:>).. et t'avais copié mysqlcppconn.lib de ta vieille API...
https://openclassrooms.com/forum/sujet/sql-probleme-du-driver-93623
Donc :
1-
"mysqlcppconn.lib --> il faut copier la nouvelle libraire qui a été livrée à l'installation de ton dernier driver MySql ODBC C++ tel qu'il fourni par MySql AB - pas l'ancienne libraire de ta vieille API qui plantait à l'époque !!... "
--> Recherche dans le package d'install. de ton nouveau driver MySql, récupère la bonne .lib et recommence stp.
amicalement.
Je me suis renseigné (hé hé..) :
Je crois que c'est toi sur ce forum (:>).. et t'avais copié mysqlcppconn.lib de ta vieille API...
https://openclassrooms.com/forum/sujet/sql-probleme-du-driver-93623
Donc :
1-
"mysqlcppconn.lib --> il faut copier la nouvelle libraire qui a été livrée à l'installation de ton dernier driver MySql ODBC C++ tel qu'il fourni par MySql AB - pas l'ancienne libraire de ta vieille API qui plantait à l'époque !!... "
--> Recherche dans le package d'install. de ton nouveau driver MySql, récupère la bonne .lib et recommence stp.
amicalement.
Capry
Messages postés
21
Date d'inscription
mardi 17 mars 2009
Statut
Membre
Dernière intervention
12 avril 2009
12 avril 2009 à 15:01
12 avril 2009 à 15:01
Le fait d'ajouter le bout de code avec "pragma" ne change rien. Mais je n'ai pas compris ton second message :
Tu veux dire qu'il faut que re remplace dans le répertoire "lib" de dev, un fichier nommé "mysqlcppconn.lib" par le nouveau fichier "mysqlcppconn.lib" qui était dans le pack que j'ai télécharger, c'est ça ?
mysqlcppconn.lib --> il faut copier la nouvelle librarie qui a été livrée à l'installation de ton driver MySql ODBC C++ tel qu'il fourni par MySql AB - pas l'ancienne libraire de ta vieille API qui plantait !!...
Tu veux dire qu'il faut que re remplace dans le répertoire "lib" de dev, un fichier nommé "mysqlcppconn.lib" par le nouveau fichier "mysqlcppconn.lib" qui était dans le pack que j'ai télécharger, c'est ça ?
Capry
Messages postés
21
Date d'inscription
mardi 17 mars 2009
Statut
Membre
Dernière intervention
12 avril 2009
12 avril 2009 à 15:27
12 avril 2009 à 15:27
Toujours le même problème, de imp_ etc...
Mais étant donnée que les deux fichiers lib faisaient le même poids je pense que c'était les même donc ça n'a pas changé grand chose...
Mais étant donnée que les deux fichiers lib faisaient le même poids je pense que c'était les même donc ça n'a pas changé grand chose...
Capry
Messages postés
21
Date d'inscription
mardi 17 mars 2009
Statut
Membre
Dernière intervention
12 avril 2009
12 avril 2009 à 15:55
12 avril 2009 à 15:55
Merci beaucoup ^^
Re,
J'ai téléchargé et installé le connecteur MySql Connector C++ 1.0.4.0 ici :
> https://dev.mysql.com/downloads/connector/cpp/1.0.html#Windows
Librairies :
Les .lib --> C:\Program Files\MySQL\MySQL Connector C++ 1.0.4.0\lib\opt
Les include --> C:\Program Files\MySQL\MySQL Connector C++ 1.0.4.0\include
Et j'ai bien utilisé la bibliothèque mysqlcppconn.lib.
Ensuite, ton code compile OK sur Visual Studio.
Si toi ça compile pas, c'est un problème de DevC++.
J'ai téléchargé et installé le connecteur MySql Connector C++ 1.0.4.0 ici :
> https://dev.mysql.com/downloads/connector/cpp/1.0.html#Windows
Librairies :
Les .lib --> C:\Program Files\MySQL\MySQL Connector C++ 1.0.4.0\lib\opt
Les include --> C:\Program Files\MySQL\MySQL Connector C++ 1.0.4.0\include
Et j'ai bien utilisé la bibliothèque mysqlcppconn.lib.
Ensuite, ton code compile OK sur Visual Studio.
Si toi ça compile pas, c'est un problème de DevC++.
#include <cstdlib> #include <iostream> #include <sstream> #include <string> #include <stdexcept> // J'ai mis toutes les librairies... (:>) #include <mysql_connection.h> #include <mysql_driver.h> #include <cppconn/driver.h> #include <cppconn/exception.h> #include <cppconn/resultset.h> #include <cppconn/statement.h> #include <cppconn/prepared_statement.h> using namespace std; int main(int argc, char **argv) { sql::mysql::MySQL_Driver *driver; sql::Connection *con; sql::Statement *stmt; driver = sql::mysql::get_mysql_driver_instance(); con = driver->connect("tcp://127.0.0.1:3306", "Capry", "mdp"); if (!con) { cout<<"Impossible de se connecter"<<endl; } else { cout<<"Connecter"<<endl; } stmt = con->createStatement(); stmt->execute("USE DATABASE"); delete stmt; delete con; system("PAUSE"); return EXIT_SUCCESS; }
Capry
Messages postés
21
Date d'inscription
mardi 17 mars 2009
Statut
Membre
Dernière intervention
12 avril 2009
12 avril 2009 à 16:34
12 avril 2009 à 16:34
J'ai recommencé à zero et suivit ta procédure.
Si je met les
Le compilateur va me donner plein de
ou de
Mais si je ne les mets pas j'ai toujours le même
Le problème viendrait-il donc de dev ??
Si je met les
#include <cppconn/resultset.h> #include <cppconn/statement.h> #include <cppconn/prepared_statement.h>
Le compilateur va me donner plein de
48 C:\Program Files\MySQL\MySQL Connector C++ 1.0.4.0\include\cppconn\config.h conflicting declaration 'typedef char int8_t' 27 C:\Dev-Cpp\include\stdint.h 'int8_t' has a previous declaration as `typedef signed char int8_t'
ou de
63 C:\Program Files\MySQL\MySQL Connector C++ 1.0.4.0\include\cppconn\config.h declaration of `typedef long int int32_t' 31 C:\Dev-Cpp\include\stdint.h conflicts with previous declaration `typedef int int32_t'
Mais si je ne les mets pas j'ai toujours le même
[Linker error] undefined reference to `_imp___ZN3sql5mysql25get_mysql_driver_instanceEv'
Le problème viendrait-il donc de dev ??
Re,
Tu peux les virer en effet car ça pré-compile si tu les enlèves.
Toutefois, télécharge le driver MySql C++ d'après le lien que je t'ai donné plus haut, réinstalle le et recompile en pointant vers les libraires que je t'ai signalées.
La version de ton driver est peut être trop vieille et certaines fonctions ne passent pas.
Tu peux les virer en effet car ça pré-compile si tu les enlèves.
Toutefois, télécharge le driver MySql C++ d'après le lien que je t'ai donné plus haut, réinstalle le et recompile en pointant vers les libraires que je t'ai signalées.
La version de ton driver est peut être trop vieille et certaines fonctions ne passent pas.
Capry
Messages postés
21
Date d'inscription
mardi 17 mars 2009
Statut
Membre
Dernière intervention
12 avril 2009
12 avril 2009 à 17:05
12 avril 2009 à 17:05
bah justement j'ai tout refait d'après le lien que tu m'as donné, j'ai téléchargé le fichier .exe, je l'ai installé.
J'ai donné au compilateur de dev les chemins vers le répertoire d'inclusion et celui des lib, mais toujours la même erreur -_- . je désespère :S .
J'ai donné au compilateur de dev les chemins vers le répertoire d'inclusion et celui des lib, mais toujours la même erreur -_- . je désespère :S .
Re,
Bah on va bien finir par trouver.
Quant à chez moi ça ne marche pas cette libraire - ça plante à l'exécution mais je n'ai peut être pas la bonne version de MySql.
> Ouaip au fait il faut une version de MySql > 5.1.x.x pour que ce connecteur MySql fonctionne alors il faut déjà peut être que tu obtiennes la dernière version de MySql.
Autre chose : essaye d'ajouter quand meme -lmysql en paramètre du linker de Devc++.
a+.
Bah on va bien finir par trouver.
Quant à chez moi ça ne marche pas cette libraire - ça plante à l'exécution mais je n'ai peut être pas la bonne version de MySql.
> Ouaip au fait il faut une version de MySql > 5.1.x.x pour que ce connecteur MySql fonctionne alors il faut déjà peut être que tu obtiennes la dernière version de MySql.
Autre chose : essaye d'ajouter quand meme -lmysql en paramètre du linker de Devc++.
a+.
Capry
Messages postés
21
Date d'inscription
mardi 17 mars 2009
Statut
Membre
Dernière intervention
12 avril 2009
12 avril 2009 à 18:24
12 avril 2009 à 18:24
Comment je fais pour obtenir la dernière version de MySQL ??
Pour le plantage au démarrage c'est que j'avais quand je mettais juste "driver" au lieu de "sql_driver" et le fait de rajouter -lmysql ne change rien non plus.
décidément cette librairie pose vraiment problème :S.
Pour le plantage au démarrage c'est que j'avais quand je mettais juste "driver" au lieu de "sql_driver" et le fait de rajouter -lmysql ne change rien non plus.
décidément cette librairie pose vraiment problème :S.
Re,
Euhh....bah :
http://downloads.mysql.com/docs/connector-cpp-en.a4.pdf
C'est la doc. du connecteur MySql de chez AB MySql.
Apparemment, il compile seulement sur Visual Studio 2003 et + sur Windows (voir page 5)...
Ré-essaye donc quand même ton vieux code (notamment en reprenant get_driver_instance()) avec ces modifs. (changements d'include) pour voir déjà si ça compile car ça m'étonne que t'ai pu compiler auparavant avec DevC++ :
Euhh....bah :
http://downloads.mysql.com/docs/connector-cpp-en.a4.pdf
C'est la doc. du connecteur MySql de chez AB MySql.
Apparemment, il compile seulement sur Visual Studio 2003 et + sur Windows (voir page 5)...
Ré-essaye donc quand même ton vieux code (notamment en reprenant get_driver_instance()) avec ces modifs. (changements d'include) pour voir déjà si ça compile car ça m'étonne que t'ai pu compiler auparavant avec DevC++ :
#include <cstdlib> #include <iostream> #include <sstream> #include <string> #include <stdexcept> #include "mysql_connection.h" #include <cppconn/driver.h> #include <cppconn/exception.h> #include <cppconn/resultset.h> #include <cppconn/statement.h> #include <cppconn/prepared_statement.h> using namespace std; int main(int argc, char **argv) { sql::Driver* driver; sql::Connection *con; sql::Statement *stmt; driver = get_driver_instance(); con = driver->connect("tcp://127.0.0.1:3306", "Capry", "mdp"); if (!con) { cout<<"Impossible de se connecter"<<endl; } else { cout<<"Connecter"<<endl; } stmt = con->createStatement(); system("PAUSE"); return EXIT_SUCCESS; }
Capry
Messages postés
21
Date d'inscription
mardi 17 mars 2009
Statut
Membre
Dernière intervention
12 avril 2009
12 avril 2009 à 19:00
12 avril 2009 à 19:00
Euh,
Si je met ton code il me disent que LIBMYSQL.dll est introuvable. C'est quoi cette dll ?
EDIT : A pardon je l'ais trouver dans les dossiers de wamp. Mais mantenant l'application plante et ce dès que je rajoute la ligne :
driver->connect("tcp://127.0.0.1:3306", "Capry", "mdp");
Une idée ?
Si je met ton code il me disent que LIBMYSQL.dll est introuvable. C'est quoi cette dll ?
EDIT : A pardon je l'ais trouver dans les dossiers de wamp. Mais mantenant l'application plante et ce dès que je rajoute la ligne :
driver->connect("tcp://127.0.0.1:3306", "Capry", "mdp");
Une idée ?
Re,
Donc ça compile pour le moment apparemment - ce serait bien que tu sois un peu plus "explicite" dans tes messages stp.
Libmysql.dll tu la trouvera normalement dans le répertoire bin d'installation de MySql Server - librarie fournie à l'install.
Copie la et met la dans C:\Windws\System32.
La encore ca m'étonne qu'il est besoin de cette .dll alors que t'en avais pas besoin auparavant mais bon...
Donc ça compile pour le moment apparemment - ce serait bien que tu sois un peu plus "explicite" dans tes messages stp.
Libmysql.dll tu la trouvera normalement dans le répertoire bin d'installation de MySql Server - librarie fournie à l'install.
Copie la et met la dans C:\Windws\System32.
La encore ca m'étonne qu'il est besoin de cette .dll alors que t'en avais pas besoin auparavant mais bon...
Capry
Messages postés
21
Date d'inscription
mardi 17 mars 2009
Statut
Membre
Dernière intervention
12 avril 2009
12 avril 2009 à 19:18
12 avril 2009 à 19:18
Et il c'est quoi le répertoire d'installation de MySQL Server ? Si tu parle d'un répertoire qui serait dans celui de Wamp (le serveur local), je l'ai mis à la racine du dossier de mon application mais il plante :
"Le programme doit fermer blabla"
Et ce à la connexion, donc si je rajoute la ligne :
driver->connect("tcp://127.0.0.1:3306", "Capry", "mdp");
Si tu ne parlais pas d'un dossier de Wamp au sujet de MySQL Server, alors où peut-on le télécharger parce qu'a priori je ne l'ai pas fais :S...
"Le programme doit fermer blabla"
Et ce à la connexion, donc si je rajoute la ligne :
driver->connect("tcp://127.0.0.1:3306", "Capry", "mdp");
Si tu ne parlais pas d'un dossier de Wamp au sujet de MySQL Server, alors où peut-on le télécharger parce qu'a priori je ne l'ai pas fais :S...
MySql est installé sur Wamp - tu trouves ta libmysql.dll dans les répertoires de Wamp mais tu m'avais pas dis que t'avais Wamp - j'ai juste supposé que t'avais au moins MySql d'installé.
Je t'ai donc indiqué le répertoire de MySql Server sans wamp mais dans les deux cas, ils fournissent cette dll.
Je m'étonne qu'on puisse compiler ton C++ avec libmysql.lib mais on est pas à l'abri de "faits inexpliqués" dans ce bas monde.
Maintenant ça plante sur driver->connect("tcp://127.0.0.1:3306", "Capry", "mdp") alors que ça plantait pas avant et qu'on a repris quasi-strictement le même code....
Pour mettre à jour MySql sur Wamp, va sur l'icone en bas à droite puis répertoire MySql, version et "Get More"..
C'est un lien sur le site de Wamp pour télécharger la dernière version de MySql.
Je t'ai donc indiqué le répertoire de MySql Server sans wamp mais dans les deux cas, ils fournissent cette dll.
Je m'étonne qu'on puisse compiler ton C++ avec libmysql.lib mais on est pas à l'abri de "faits inexpliqués" dans ce bas monde.
Maintenant ça plante sur driver->connect("tcp://127.0.0.1:3306", "Capry", "mdp") alors que ça plantait pas avant et qu'on a repris quasi-strictement le même code....
Pour mettre à jour MySql sur Wamp, va sur l'icone en bas à droite puis répertoire MySql, version et "Get More"..
C'est un lien sur le site de Wamp pour télécharger la dernière version de MySql.
Capry
Messages postés
21
Date d'inscription
mardi 17 mars 2009
Statut
Membre
Dernière intervention
12 avril 2009
12 avril 2009 à 20:10
12 avril 2009 à 20:10
Ah cette librairie est TRÈS GALÈRE !
C'est pourquoi je viens de trouver un lien très intéressant vers un tuto du SDZ (j'avais pourtant regardé sur le site mais j'ai dû le loupe :S).
Apparemment il y a une autre libraire : très simple d'utilisation, il suffit de faire 5-6 clics de souris dans dev et tout l'API MySQL est installé ^^ !!
En d'autre mot voici le lien :
http://www.siteduzero.com/tutoriel-3-34984-utiliser-l-api-mysql-dans-vos-programmes.html
Je le conseille VIVEMENT à tous ceux qui aurais aussi un problème avec l'API que j'essayais d'inclure jusqu'à maintenant. J'ai dû y passer 10 min à tous casser et je peux déjà me connecter à la base sans aucun problème, et le tuto explique l'installation sur les trois principaux IDE (code blocks, visual et dev). Voilà, encore un grand merci à vous pour vos nombreuses et rapides réponses.
Cordialement
Capry
C'est pourquoi je viens de trouver un lien très intéressant vers un tuto du SDZ (j'avais pourtant regardé sur le site mais j'ai dû le loupe :S).
Apparemment il y a une autre libraire : très simple d'utilisation, il suffit de faire 5-6 clics de souris dans dev et tout l'API MySQL est installé ^^ !!
En d'autre mot voici le lien :
http://www.siteduzero.com/tutoriel-3-34984-utiliser-l-api-mysql-dans-vos-programmes.html
Je le conseille VIVEMENT à tous ceux qui aurais aussi un problème avec l'API que j'essayais d'inclure jusqu'à maintenant. J'ai dû y passer 10 min à tous casser et je peux déjà me connecter à la base sans aucun problème, et le tuto explique l'installation sur les trois principaux IDE (code blocks, visual et dev). Voilà, encore un grand merci à vous pour vos nombreuses et rapides réponses.
Cordialement
Capry
Re,
C'est très intéressant en effet mais libmysql.lib c'est pour développer en C ANSI... c'est pour ça que ça ne peut compiler en C++ et ça ne résout en rien notre problème avec les API C++ de MySql AB.
CQFD.
_________________________________________________________________________
C'est très intéressant en effet mais libmysql.lib c'est pour développer en C ANSI... c'est pour ça que ça ne peut compiler en C++ et ça ne résout en rien notre problème avec les API C++ de MySql AB.
CQFD.
_________________________________________________________________________
"... Hallucinogènes ou en injection ?..."
Salut,
Je réouvre un post un peu vieux ^^ mais pour vous faire part de mon expérience qui peut peut être vous aider : sous codes::blocks ou d'autres freeware qui utilisent les portages de GCC sur windows (genre mygwin) ça arrive souvent que le compilateur C++ dans les options soit mal configuré et soit en fait le compilateur C. Or je ne sais par quel miracle il ne gueule absolument pas quand il voit tous les mots clés du C++, il compile sans broncher, mais au moment de l'édition de lien ça chie.
Je sais pas si c'est ce qu'il t'es arrivé, mais c'est peut être ça, surtout que ta deuxième librairie est une librairie C, ce qui expliquerait pourquoi il n'y avait plus d'erreur. Si votre configuration semble bonne, que vous avez inclus toutes les librairies et que des exemples simples font ce genre d'erreur au linkage, VERIFIEZ que 1) vous dites bien à l'IDE que vous voulez compiler en C++ (genre dans un projet, cocher C++ et pas C quoi) et même que 2) dans la configuration des exécutables de votre IDE, les compilateurs correspondent (par exemple si l'IDE utilise le même exécutable pour le compilateur C et le compilateur C++ ça risque de ne pas être bon)
Voili voilou, bonne prog ;)
Je réouvre un post un peu vieux ^^ mais pour vous faire part de mon expérience qui peut peut être vous aider : sous codes::blocks ou d'autres freeware qui utilisent les portages de GCC sur windows (genre mygwin) ça arrive souvent que le compilateur C++ dans les options soit mal configuré et soit en fait le compilateur C. Or je ne sais par quel miracle il ne gueule absolument pas quand il voit tous les mots clés du C++, il compile sans broncher, mais au moment de l'édition de lien ça chie.
Je sais pas si c'est ce qu'il t'es arrivé, mais c'est peut être ça, surtout que ta deuxième librairie est une librairie C, ce qui expliquerait pourquoi il n'y avait plus d'erreur. Si votre configuration semble bonne, que vous avez inclus toutes les librairies et que des exemples simples font ce genre d'erreur au linkage, VERIFIEZ que 1) vous dites bien à l'IDE que vous voulez compiler en C++ (genre dans un projet, cocher C++ et pas C quoi) et même que 2) dans la configuration des exécutables de votre IDE, les compilateurs correspondent (par exemple si l'IDE utilise le même exécutable pour le compilateur C et le compilateur C++ ça risque de ne pas être bon)
Voili voilou, bonne prog ;)