Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Connecter à une base de données Mysql via ODBC à partir d'un programme C sous Visual Studio 2008 Windows.

0 views
Skip to first unread message

programmation

unread,
Jul 5, 2009, 3:14:47 PM7/5/09
to
Salut,

Je voudrais connecter à une base de données Mysql via ODBC à partir
d'un programme C sous Visual Studio 2008 Windows.
le nom de DSN est : pays_dsn
le nom d'utilisateur : root
le mot de passe est vide

#include <conio.h>
#include <stdio.h>
#include <windows.h>
#include <sql.h>
#include <sqlext.h>
#include <sqltypes.h>

int main()
{
SQLHENV env;

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];

printf("PAYS > CAPITALE\n\n");

while (SQL_SUCCEEDED(SQLFetch(stmt)))
{
SQLGetData(stmt, 1, SQL_C_CHAR, pays,
sizeof(pays), NULL);
SQLGetData(stmt, 2, SQL_C_CHAR,
capitale, sizeof(capitale), NULL);
printf("%-14s %-14s\n", pays,
capitale);
}
}

SQLFreeHandle(SQL_HANDLE_STMT, stmt);
}

SQLDisconnect(con);
}

SQLFreeHandle(SQL_HANDLE_DBC, con);
}
}

SQLFreeHandle(SQL_HANDLE_ENV, env);
}
getch();
return 0;
}

Après la compilation et l'exécution j'aurais ce message:

La fonction SQLConnect a echoue.

J'ai pris cet exemple de lien suivant:
http://melem.developpez.com/langagec/odbc/

Comment ce problème de connexion va être résolue?

SVP, j'ai besoin de vos aides.

domi

unread,
Jul 4, 2009, 4:07:17 PM7/4/09
to
programmation wrote:
> Salut,
>
> Je voudrais connecter � une base de donn�es Mysql via ODBC � partir

> d'un programme C sous Visual Studio 2008 Windows.

> /....
> /....


> La fonction SQLConnect a echoue.
>
> J'ai pris cet exemple de lien suivant:

> http://melem....
>
> Comment ce probl�me de connexion va �tre r�solue?

Eviter ce genre de lien (surtout ce site..)
et prends les nombreux exemples de Msdn, comme
http://support.microsoft.com/kb/252699 ,
notamment pour la gestion d'erreurs , fonction HandleError pour savoir
l'origine de l'erreur
Et changer le driver pour MYSQL bien sur.

Et c'est plus simple avec les libs MYSQL : voir le lien donn� r�cemment :
http://www.arcanthea.com/opensource/tutoriels/vcpp-mysql/vcpp-mysql-tut.pdf

Sylvain SF

unread,
Jul 5, 2009, 4:22:57 PM7/5/09
to
programmation a �crit :
> Salut,
>
> Je voudrais connecter � une base de donn�es Mysql via ODBC � partir

> d'un programme C sous Visual Studio 2008 Windows.

cela suppose d'avoir cr�� l'alias de connexion ODBC, l'as-tu fait ?
relire <http://dev.mysql.com/doc/refman/5.1/en/connector-odbc.html>
en cas de besoin.

comme sugg�r�, il est bcp plus efficace (voire simple car les erreurs
sont moins masqu�es) d'utiliser directement l'API mySQL.

le "connector/C++" est �galement une bonne alternative pour d�buter
<http://dev.mysql.com/doc/refman/5.1/en/connector-cpp.html>

Sylvain.

marc

unread,
Jul 10, 2009, 4:25:51 AM7/10/09
to
programmation a écrit :

> Salut,
>
> Je voudrais connecter à une base de données Mysql via ODBC à partir
> d'un programme C sous Visual Studio 2008 Windows.

comme les autres réponses (Msdn et mysqllib) et pour ODBC, active les
Traces ODBC et tu auras de suite la cause de l'erreur

programmation

unread,
Jul 14, 2009, 11:00:52 AM7/14/09
to
On 10 juil, 09:25, marc <marc.tes...@caramail.com> wrote:
> programmation a écrit :
>
> > Salut,
>
> > Je voudraisconnecter à une base de données Mysql via ODBC à partir> d'un programme Csous Visual Studio 2008 Windows.

programmation

unread,
Jul 14, 2009, 11:02:04 AM7/14/09
to
On 10 juil, 09:25, marc <marc.tes...@caramail.com> wrote:
> programmation a écrit :
>
> > Salut,
>
> > Je voudraisconnecter à une base de données Mysql via ODBC à partir> d'un programme Csous Visual Studio 2008 Windows.

>
> comme les autres réponses (Msdn et mysqllib) et pour ODBC, active les
> Traces ODBC et tu auras de suite la cause de l'erreur

Salut,

Après la compilation et l'exécution j'obtiens:

retcode = -1 // c'est la valeur de retour de SQLConnect
Erreur sur l'instruction SQLConnect Impossible de se connecter a la
source de donnees:
1. [

- Qu'est ce que signifie ce message d'erreur ?: 1. [

programmation

unread,
Jul 14, 2009, 11:05:09 AM7/14/09
to
On 4 juil, 21:07, domi <d...@dom.com> wrote:
> programmation wrote:
> > Salut,
>
> > Je voudraisconnecter à une base de données Mysql via ODBC à partir> d'un programme Csous Visual Studio 2008 Windows.

> > /....
> > /....
> > La fonction SQLConnect a echoue.
>
> > J'ai pris cet exemple de lien suivant:
> >http://melem....
>
> > Comment ce problème de connexion va être résolue?
>
> Eviter ce genre de lien (surtout ce site..)
> et prends les nombreux exemples de Msdn, commehttp://support.microsoft.com/kb/252699,
> notamment pour la gestion d'erreurs , fonction HandleError pour savoir
> l'origine de l'erreur
> Et changer le driver pour MYSQL bien sur.
>
> Et c'est plus simple avec les libs MYSQL : voir le lien donné récemment :http://www.arcanthea.com/opensource/tutoriels/vcpp-mysql/vcpp-mysql-t...

domi

unread,
Jul 14, 2009, 1:46:22 PM7/14/09
to
programmation wrote:
> On 4 juil, 21:07, domi <d...@dom.com> wrote:

> Apr�s la compilation et l'ex�cution j'obtiens:


> retcode = -1 // c'est la valeur de retour de SQLConnect
> Erreur sur l'instruction SQLConnect Impossible de se connecter a la
> source de donnees:
> 1. [
>
> - Qu'est ce que signifie ce message d'erreur ?: 1. [

Apparemment tu n'as m�me pas utilis� HandleError !

domi

unread,
Jul 14, 2009, 1:50:40 PM7/14/09
to
programmation wrote:
>
>> comme les autres r�ponses (Msdn et mysqllib) et pour ODBC, active les

>> Traces ODBC et tu auras de suite la cause de l'erreur

> Apr�s la compilation et l'ex�cution j'obtiens:


> retcode = -1 // c'est la valeur de retour de SQLConnect

Quel rapport avec l'activation des _Traces_ ODBC ?

programmation

unread,
Jul 14, 2009, 3:15:36 PM7/14/09
to
On 14 juil, 18:46, domi <d...@dom.com> wrote:
> programmation wrote:
> > On 4 juil, 21:07, domi <d...@dom.com> wrote:
> > Après la compilation et l'exécution j'obtiens:

> > retcode = -1 // c'est la valeur de retour de SQLConnect
> > Erreur sur l'instruction SQLConnect Impossible de se connecter a la
> > source de donnees:
> > 1. [
>
> > - Qu'est ce que signifie ce message d'erreur ?:  1. [
>
> Apparemment tu n'as même pas utilisé HandleError !

- Comment je vais utiliser HandleError ?

- J'ai utilisé la fonction SQLGetDiagField()

Voici mon code :
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include<stdlib.h>
#include<string.h>

#include <sql.h>
#include <sqlext.h>
#include <sqltypes.h>


void sql_perror(SQLSMALLINT HandleType, SQLHANDLE Handle, const char *
title)
{
SQLCHAR s[SQL_MAX_MESSAGE_LENGTH];
SQLSMALLINT ligne = 1;

fprintf(stderr, "%s :\n", title);

while (SQLGetDiagField(HandleType, Handle, ligne,
SQL_DIAG_MESSAGE_TEXT, s, sizeof(s), NULL) != SQL_NO_DATA)
{
fprintf(stderr, "%d. %s\n", ligne, s);
ligne++;
}
}
void main()
{
SQLRETURN retcode;
SQLINTEGER lon,la,lb,lc,ld,taille=SQL_NTS;
SQLCHAR design[20];
SQLHDBC hdbc;
SQLHENV henv;
SQLHSTMT hstmt;


/*Allocate environment handle */
retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);

if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) //{
/* Set the ODBC version environment attribute */
retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)
SQL_OV_ODBC3, 0);

if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) //{
/* Allocate connection handle */
retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);

// if (retcode == SQL_SUCCESS || retcode ==
SQL_SUCCESS_WITH_INFO)

//printf("%s","vrai");
//else
//printf("erreur\n");
// }

//}


// retcode = SQLConnect(hdbc,(SQLCHAR*)dsn, SQL_NTS,
(SQLCHAR*)uid, SQL_NTS,(SQLCHAR*)pwd, SQL_NTS);
retcode=SQLConnect(hdbc,(SQLCHAR *)"pays_dsn",SQL_NTS,(SQLCHAR
*)"root",SQL_NTS,(SQLCHAR *)"",SQL_NTS);
printf("retcode=%d",retcode);
if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
printf("\n%s","vrai");
else
{
printf("\nErreur sur l'instruction SQLConnect ");
sql_perror(SQL_HANDLE_DBC, hdbc, "Impossible de se connecter a la
source de donnees");
}
}


domi

unread,
Jul 14, 2009, 4:12:01 PM7/14/09
to
programmation wrote:
> On 14 juil, 18:46, domi <d...@dom.com> wrote:
>> programmation wrote:
>>> On 4 juil, 21:07, domi <d...@dom.com> wrote:
>>> Apr�s la compilation et l'ex�cution j'obtiens:

>>> retcode = -1 // c'est la valeur de retour de SQLConnect
>>> Erreur sur l'instruction SQLConnect Impossible de se connecter a la
>>> source de donnees:
>>> 1. [
>>> - Qu'est ce que signifie ce message d'erreur ?: 1. [
>> Apparemment tu n'as m�me pas utilis� HandleError !

>
> - Comment je vais utiliser HandleError ?

Comme dans l'exemple de Microsoft :

if (nstatus != SQL_SUCCESS && nstatus != SQL_SUCCESS_WITH_INFO)
{
HandleError(hdbc,SQL_HANDLE_STMT,nstatus);
return;
}

et �a doit donner un libell� plus pr�cis, non ?

Et comme avait dit Marc, active les traces ODBC pour voir les d�tails

programmation

unread,
Jul 14, 2009, 6:10:29 PM7/14/09
to
On 14 juil, 21:12, domi <d...@dom.com> wrote:
> programmation wrote:
> > On 14 juil, 18:46, domi <d...@dom.com> wrote:
> >> programmation wrote:
> >>> On 4 juil, 21:07, domi <d...@dom.com> wrote:
> >>> Après la compilation et l'exécution j'obtiens:

> >>> retcode = -1 // c'est la valeur de retour de SQLConnect
> >>> Erreur sur l'instruction SQLConnect Impossible de se connecter a la
> >>> source de donnees:
> >>> 1. [
> >>> - Qu'est ce que signifie ce message d'erreur ?:  1. [
> >> Apparemment tu n'as même pas utilisé HandleError !

>
> > - Comment je vais utiliser HandleError ?
>
> Comme dans l'exemple de Microsoft :
>
> if (nstatus != SQL_SUCCESS && nstatus != SQL_SUCCESS_WITH_INFO)
>         {
>                 HandleError(hdbc,SQL_HANDLE_STMT,nstatus);
>                 return;
>         }
>
> et ça doit donner un libellé plus précis, non ?
>
> Et comme avait dit Marc, active les traces ODBC pour voir les détails

Comment je vais activer les traces ODBC ?

programmation

unread,
Jul 14, 2009, 6:19:46 PM7/14/09
to
On 10 juil, 09:25, marc <marc.tes...@caramail.com> wrote:
> programmation a écrit :
>
> > Salut,
>
> > Je voudraisconnecter à une base de données Mysql via ODBC à partir> d'un programme Csous Visual Studio 2008 Windows.

>
> comme les autres réponses (Msdn et mysqllib) et pour ODBC, active les
> Traces ODBC et tu auras de suite la cause de l'erreur

> programmation wrote:

Christian ASTOR

unread,
Jul 15, 2009, 3:02:06 AM7/15/09
to
programmation wrote:

> Comment je vais activer les traces ODBC ?

Soit manuellement, par odbcad32
Soit par SQLSetConnectAttr() ou SQLSetConnectOption()

programmation

unread,
Jul 16, 2009, 1:21:28 PM7/16/09
to
On 15 juil, 08:02, Christian ASTOR <casto...@club-internet.fr> wrote:
> programmation wrote:
> > Comment je vais activer les traces ODBC ?
>
> Soit manuellement, par odbcad32
Comment manuellement par odbcad32 ?

Soit par SQLSetConnectAttr() ou SQLSetConnectOption()

Comment je vais utiliser dans mon programme SQLSetConnectAttr() ou
SQLSetConnectOption() ?

Merci.

Christian ASTOR

unread,
Jul 16, 2009, 3:03:50 PM7/16/09
to
programmation wrote:
> On 15 juil, 08:02, Christian ASTOR <casto...@club-internet.fr> wrote:
>>programmation wrote:
>>>Comment je vais activer les traces ODBC ?

>>Soit manuellement, par odbcad32
>
> Comment manuellement par odbcad32 ?

Comment �a "comment" ?
Le DSN, tu l'as bien cr�� avec odbcad32 ?
Et il y a bien l'onglet "Tracing" ou "Tra�age" ?

http://www.winpacmon.com/winpacmonDB/odbc-tracing.jpg

programmation

unread,
Jul 16, 2009, 4:02:48 PM7/16/09
to
Salut,

> Le DSN, tu l'as bien créé avec odbcad32 ?

Je trouve dans les propriétés de projet les dépendances
supplémentaires les fichiers suivants :
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
comdlg32.lib
advapi32.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
odbc32.lib
odbccp32.lib

Alors, je ne trouve pas odbcad32.

> Et il y a bien l'onglet "Tracing" ou "Traçage" ?

Oui. Il y a l'onglet "Traçage".


0 new messages