Exemple de test de connection au Mysql ne marche pas dans un programme C
boualiasma
Messages postés393Date d'inscriptionlundi 22 juin 2009StatutMembreDernière intervention23 décembre 2011
-
1 juil. 2009 à 09:41
boualiasma
Messages postés393Date d'inscriptionlundi 22 juin 2009StatutMembreDernière intervention23 décembre 2011
-
8 juil. 2009 à 11:08
Salut,
j'ai installé la librairie mysql.
- Je voudrais établir dans mon programme C une connexion à une base de données crée sous Mysql(j'ai instalé EasyPHP-3.0-setup). Sachant que mon programme C est sous Visual Studio 2008.
- La vesion de mysql est 5.1.30.
- J'ai écrit un petit exemple de test. mais j'ai eu des erreurs.
int main() {
xmlDocPtr doc;
xmlNodePtr racine;
MYSQL mysql;
mysql_init(&mysql);
mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,"option");
// Ouverture du fichier XML
doc = xmlParseFile("catalogue.xml");
if (doc == NULL) {
fprintf(stderr, "Document XML invalide\n");
return EXIT_FAILURE;
}
// Récupération de la racine
racine = xmlDocGetRootElement(doc);
if (racine == NULL) {
fprintf(stderr, "Document XML vierge\n");
xmlFreeDoc(doc);
return EXIT_FAILURE;
}
printf("La racine du document est : %s\n", racine->name);
// Libération de la mémoire
xmlFreeDoc(doc);
return EXIT_SUCCESS;
if(mysql_real_connect(&mysql,"localhost","root","","chmsi",0,NULL,0))
{
mysql_close(&mysql);
}
else
{
printf("Une erreur s'est produite lors de la connexion à la BDD!");
}
}
message d'erreur:
1>------ Début de la génération : Projet : passage, Configuration : Debug Win32 ------
1>Compilation en cours...
1>main.c
1>Édition des liens en cours...
1>main.obj : error LNK2019: symbole externe non résolu _mysql_close@4 référencé dans la fonction _main
1>main.obj : error LNK2019: symbole externe non résolu _mysql_real_connect@32 référencé dans la fonction _main
1>main.obj : error LNK2019: symbole externe non résolu _mysql_options@12 référencé dans la fonction _main
1>main.obj : error LNK2019: symbole externe non résolu _mysql_init@4 référencé dans la fonction _main
1>C:\ChGaLib\passage\Debug\passage.exe : fatal error LNK1120: 4 externes non résolus
1>Le journal de génération a été enregistré à l'emplacement "file://c:\ChGaLib\passage\passage\Debug\BuildLog.htm"
1>passage - 5 erreur(s), 0 avertissement(s)
========== Génération : 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré
boualiasma
Messages postés393Date d'inscriptionlundi 22 juin 2009StatutMembreDernière intervention23 décembre 20115 1 juil. 2009 à 21:48
Salut,
1)
- La vesion de mysql est 5.1.30.
- J'ai trouvé seulement le dossier bin sous:
C:\Program Files\EasyPHP 3.0\mysql\bin
- J'ai ajouté le dossier include et lib qui existent dans le dossier de API mysql respectivement sous:
C:\Program Files\Microsoft Visual Studio 9.0\VC\include
C:\Program Files\Microsoft Visual Studio 9.0\VC\bin
2) Est ce que j'ajoute le dossier bin de API Mysql sous ?
C:\Program Files\Microsoft Visual Studio 9.0\VC\bin
3) - Quelles sont les étapes à suivre pour connecter une base des données sous Mysql via ODBC à partir d'un programme C ?
4) Quelle est la différence entre connexion ODBC et API Mysql?
int main() {
xmlDocPtr doc;
xmlNodePtr racine;
MYSQL mysql;
mysql_init(&mysql);
mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,"option");
// Ouverture du fichier XML
doc = xmlParseFile("catalogue.xml");
if (doc == NULL) {
fprintf(stderr, "Document XML invalide\n");
return EXIT_FAILURE;
}
// Récupération de la racine
racine = xmlDocGetRootElement(doc);
if (racine == NULL) {
fprintf(stderr, "Document XML vierge\n");
xmlFreeDoc(doc);
return EXIT_FAILURE;
}
printf("La racine du document est : %s\n", racine->name);
// Libération de la mémoire
xmlFreeDoc(doc);
return EXIT_SUCCESS;
if(mysql_real_connect(&mysql,"localhost","root","","chmsi",0,NULL,0))
{
mysql_close(&mysql);
}
else
{
printf("Une erreur s'est produite lors de la connexion à la BDD!");
}
}
Voici le message d'erreur:
1>------ Début de la génération : Projet : passage, Configuration : Debug Win32 ------
1>Compilation en cours...
1>main.c
1>Édition des liens en cours...
1>LINK : fatal error LNK1104: impossible d'ouvrir le fichier 'libmysql.lib'
1>Le journal de génération a été enregistré à l'emplacement "file://c:\ChGaLib\passage\passage\Debug\BuildLog.htm"
1>passage - 1 erreur(s), 0 avertissement(s) Génération : 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré
SVP, j'ai besoin de vos aides.
C'est très urgent.
Merci.
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_ghuysmans99
Messages postés3982Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 201316 1 juil. 2009 à 23:33
Dans ton répertoire bin, il y a un fichier libmysql.lib
Copie-le dans le répertoire lib de VC++
Recompile ton projet VC++ normalement ça devrait aller.
Quelle différence entre ODBC ? ODBC gère plusieurs types de bases de données ... MySQL c'est strictement MySQL.
boualiasma
Messages postés393Date d'inscriptionlundi 22 juin 2009StatutMembreDernière intervention23 décembre 20115 2 juil. 2009 à 00:31
J'ai ajouté le fichier libmysql.lib sous:
C:\Program Files\Microsoft Visual Studio 9.0\VC\lib
Le message d'erreur:
1>------ Début de la génération : Projet : passage, Configuration : Debug Win32 ------
1>Édition des liens en cours...
1>LINK : fatal error LNK1104: impossible d'ouvrir le fichier 'libmysql.lib'
1>Le journal de génération a été enregistré à l'emplacement "file://c:\ChGaLib\passage\passage\Debug\BuildLog.htm"
1>passage - 1 erreur(s), 0 avertissement(s)
======== Génération : 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========
cs_ghuysmans99
Messages postés3982Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 201316 2 juil. 2009 à 01:09
Dans aucun des deux ... il doit le prendre dans le répertoire include de VC++.
Vérifie que tu l'as pas fait de faute de frappe ...
Et si tu as un stdafx.h, recompile tout le projet (menu Rebuild passage)
Si ça marche toujours pas, copie-le dans C:\ChGaLib\passage\passage\ et dans ton code fait ceci :
#pragma comment(lib,"libmysql.lib")
Recompile le code
int main() {
xmlDocPtr doc;
xmlNodePtr racine;
MYSQL mysql;
mysql_init(&mysql);
mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,"option");
// Ouverture du fichier XML
doc = xmlParseFile("catalogue.xml");
if (doc == NULL) {
fprintf(stderr, "Document XML invalide\n");
return EXIT_FAILURE;
}
// Récupération de la racine
racine = xmlDocGetRootElement(doc);
if (racine == NULL) {
fprintf(stderr, "Document XML vierge\n");
xmlFreeDoc(doc);
return EXIT_FAILURE;
}
printf("La racine du document est : %s\n", racine->name);
// Libération de la mémoire
xmlFreeDoc(doc);
return EXIT_SUCCESS;
if(mysql_real_connect(&mysql,"localhost","root","","chmsi",0,NULL,0))
{
mysql_close(&mysql);
}
else
{
printf("Une erreur s'est produite lors de la connexion à la BDD!");
}
}
message d'erreur:
1>------ Début de la génération : Projet : passage, Configuration : Debug Win32 ------
1>Compilation en cours...
1>main.c
1>c:\chgalib\passage\passage\main.c(23) : fatal error C1083: Impossible d'ouvrir le fichier include : 'stdafx.h' : No such file or directory
1>Le journal de génération a été enregistré à l'emplacement "file://c:\ChGaLib\passage\passage\Debug\BuildLog.htm"
1>passage - 1 erreur(s), 0 avertissement(s) Génération : 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré
cs_ghuysmans99
Messages postés3982Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 201316 2 juil. 2009 à 19:03
<ol>
<li>C'est une version compilée, bin étant l'abréviation de binaire, il y a dans ce répertoire des fichiers compilés.</li>
<li>Jamais fait moi-même, mais en cherchant un peu ...</li>
<li>Avec une connexion ODBC, il te suffit de changer la chaine de connexion et tu peux utiliser un tout autre SGBD.
Par contre avec libmysql, ce n'est valable que pour MySQL et si tu veux changer de SGBD, tu dois changer tout le code qui fait appel à ces fonctions.
</li>
</ol>
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 3 juil. 2009 à 14:47
Bin... Je ne crois pas qu'il y est de meilleur solution.
Si tu veux une appli performante, utilise l'API MySQL.
Si tu veux pouvoir par la suite facilement prendre en charge d'autres type de base de données (Oracle, SQL Server...), utilise ODBC.
boualiasma
Messages postés393Date d'inscriptionlundi 22 juin 2009StatutMembreDernière intervention23 décembre 20115 8 juil. 2009 à 11:08
Salut,
- Je voudrais établir dans mon programme C une connexion à une base de
données crée sous Mysql(j'ai instalé EasyPHP-1.7-setup). Sachant que
mon programme C est sous Visual Studio 2008.
- La vesion de mysql est 4.0.15.
- J'ai trouvé seulement le dossier bin sous:
C:\Program Files\EasyPHP 1.7\mysql\bin
pas de dossiers lib et include .
- Quelles sont les étapes à suivre pour établir cette connexion pour
que je puisse traiter des requêtes de sélection et de Mise à jour ?
- y-a-il un bon exemple de test pour vérifier ces étapes ?
Je serais très contente pour toute solution.
Je voudrais connecter à une base de données Mysql via ODBC à partir
IF( !SQL_SUCCEEDED(SQLAllocHandle(SQL_HANDLE_ENV, NULL, &env)))
fprintf(stderr, "La fonction SQLAllocHandle a echoue
(SQL_HANDLE_ENV).\n");
else
{
IF( !SQL_SUCCEEDED(SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION,
(void *)SQL_OV_ODBC3, 0)))
fprintf(stderr, "La fonction SQLSetEnvAttr a echoue.\n");
else
{
SQLHDBC con;
IF( !SQL_SUCCEEDED(SQLAllocHandle(SQL_HANDLE_DBC, env,
&con)))
fprintf(stderr, "La fonction SQLAllocHandle a echoue
(SQL_HANDLE_DBC).\n");
else
{
SQLCHAR dsn[] = "pays_dsn", uid[] = "root", pwd[] =
"";
IF( !SQL_SUCCEEDED(SQLConnect(con, dsn, SQL_NTS, uid,
SQL_NTS, pwd, SQL_NTS)))
// IF( !SQL_SUCCEEDED(SQLConnect(con,(SQLCHAR *)"pays_dsn",
SQL_NTS,(SQLCHAR *)"root", SQL_NTS,(SQLCHAR *)"", SQL_NTS)))
fprintf(stderr, "La fonction SQLConnect a echoue.
\n");
else
{
SQLHSTMT stmt;
IF( !SQL_SUCCEEDED(SQLAllocHandle
(SQL_HANDLE_STMT, con, &stmt)))
fprintf(stderr, "La fonction SQLAllocHandle a
echoue (SQL_HANDLE_STMT).\n");
else
{
IF( !SQL_SUCCEEDED(SQLExecDirect(stmt,
"SELECT * FROM pays_tbl;", SQL_NTS)))
fprintf(stderr, "La fonction SQLExecDirect
a echoue.\n");
else
{
SQLCHAR pays[15], capitale[15];