Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

16 réponses
Avatar
programmation
Salut,

Je voudrais connecter =E0 une base de donn=E9es Mysql via ODBC =E0 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[] =3D "pays_dsn", uid[] =3D "root", pwd[] =3D
"";

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=E8s la compilation et l'ex=E9cution 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=E8me de connexion va =EAtre r=E9solue?

SVP, j'ai besoin de vos aides.

6 réponses

1 2
Avatar
programmation
On 14 juil, 21:12, domi wrote:
programmation wrote:
> On 14 juil, 18:46, domi wrote:
>> programmation wrote:
>>> On 4 juil, 21:07, domi 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 ?
Avatar
programmation
On 10 juil, 09:25, marc wrote:
programmation a écrit :

> Salut,

> Je voudraisconnecter à une base de données Mysql via ODBC à parti r> 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:
> On 14 juil, 18:46, domi wrote:
>> programmation wrote:
>>> On 4 juil, 21:07, domi 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 ?
Avatar
Christian ASTOR
programmation wrote:

Comment je vais activer les traces ODBC ?



Soit manuellement, par odbcad32
Soit par SQLSetConnectAttr() ou SQLSetConnectOption()
Avatar
programmation
On 15 juil, 08:02, Christian ASTOR 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.
Avatar
Christian ASTOR
programmation wrote:
On 15 juil, 08:02, Christian ASTOR 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
Avatar
programmation
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".
1 2