bonjour ,
je suis sur linux
je suis débutante en C , mais j'ai vraiment besoin de me connecter à une BDD via odbc à partir d'un programme en c.


j'ai trouvé des exemples de codes ;
en voilà 1 que j'ai trouvé ici sur le forum : http://www.developpez.net/forums/sho...?p=381#post381
Citation Envoyé par Anonymous

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

static void geterror( HSTMT );

#define RC_SUCCESS(rc) (((rc)==SQL_SUCCESS) || ((rc) == SQL_SUCCESS_WITH_INFO))

/* env et connection */
SQLHENV Henv ;
SQLHDBC Hdbc ;


char req0[] = "select A.IDENTITYCOL from X3.ZZBLOB A where A. NUM_0 = 1" ;


main () {

/* Declaration */
RETCODE rc ;
SQLHSTMT hStmt0 ;


/* variable de retours Bind */
SQLINTEGER pcb[1] ;
SQLINTEGER id ;


/* ************************************ */
/* Environement et connection */

rc = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &Henv);
if (!RC_SUCCESS( rc ))
geterror( SQL_NULL_HSTMT ) ;

rc = SQLSetEnvAttr(Henv, SQL_ATTR_ODBC_VERSION,
(SQLPOINTER) SQL_OV_ODBC3, SQL_IS_INTEGER);
if (!RC_SUCCESS( rc ))
geterror( SQL_NULL_HSTMT ) ;

rc = SQLAllocHandle(SQL_HANDLE_DBC, Henv, &Hdbc);
if (!RC_SUCCESS( rc ))
geterror( SQL_NULL_HSTMT ) ;

rc = SQLConnect(Hdbc, "HERCULE2000", SQL_NTS, "X3", SQL_NTS, "tiger", SQL_NTS);
if (!RC_SUCCESS( rc ))
geterror( SQL_NULL_HSTMT ) ;

rc = SQLSetConnectAttr(Hdbc, SQL_ATTR_AUTOCOMMIT, SQL_AUTOCOMMIT_OFF, SQL_IS_UINTEGER);
if (!RC_SUCCESS( rc ))
geterror( SQL_NULL_HSTMT ) ;

rc = SQLSetConnectAttr(Hdbc, SQL_ATTR_TXN_ISOLATION,
(SQLPOINTER) SQL_TXN_READ_COMMITTED, SQL_IS_UINTEGER);
if (!RC_SUCCESS( rc ))
geterror( SQL_NULL_HSTMT ) ;

rc = SQLEndTran( SQL_HANDLE_DBC, Hdbc, SQL_COMMIT ) ;
if (!RC_SUCCESS( rc ))
geterror( SQL_NULL_HSTMT ) ;


/* ************************************* */

rc = SQLAllocHandle(SQL_HANDLE_STMT, Hdbc, &hStmt0);
if (!RC_SUCCESS( rc ))
geterror( SQL_NULL_HSTMT ) ;

rc = SQLPrepare( hStmt0, req0, SQL_NTS ) ;
if (!RC_SUCCESS( rc ))
geterror( hStmt0 ) ;

rc = SQLBindCol( hStmt0, 1, SQL_C_SLONG, &id, 0, pcb );
if (!RC_SUCCESS( rc ))
geterror( hStmt0 ) ;

rc = SQLExecute( hStmt0 ) ;
if (!RC_SUCCESS( rc ))
geterror( hStmt0 ) ;

rc = SQLFetch( hStmt0 ) ;
if (!RC_SUCCESS( rc ))
geterror( hStmt0 ) ;

rc = SQLFreeHandle(SQL_HANDLE_STMT, hStmt0);
if (!RC_SUCCESS( rc ))
geterror( hStmt0 ) ;

/* ************************************* */
/* Deconnection */
rc = SQLEndTran( SQL_HANDLE_DBC, Hdbc, SQL_COMMIT ) ;
if (!RC_SUCCESS( rc ))
geterror( SQL_NULL_HSTMT ) ;

/* ********************************** */
/* c'est fini ! Free stmt */

rc = SQLDisconnect( Hdbc );
if (!RC_SUCCESS( rc ))
geterror( SQL_NULL_HSTMT ) ;

SQLFreeHandle(SQL_HANDLE_DBC, Hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, Henv);
return( 0 ) ;
}



static void geterror( HSTMT hStmt )
{
char msg[256] ; /* pointer to message */
RETCODE rc; /* code erreur retour */
char szSqlState[6]; /* etat de retour */
long noError; /* no de message */
short cbmsg;

rc = SQLError(Henv, Hdbc, hStmt, szSqlState, &noError, msg, 256, &cbmsg);
printf( msg ) ;

exit( 0 );
}
Mon pb :
Quand j'essaye de compiler je reçois les erreurs suivantes :
exemple.c:2:25: windows.h : Aucun fichier ou répertoire de ce type
exemple.c:4:21: sql.h : Aucun fichier ou répertoire de ce type
exemple.c:5:24: sqlext.h : Aucun fichier ou répertoire de ce type
exemple.c:7: attention : noms de paramètres (sans type) dans la déclaration de fonction
exemple.c:12: erreur: erreur de syntaxe avant « Henv »
exemple.c:12: attention : la définition de données n'a pas de type ni de classe de stockage
exemple.c:13: erreur: erreur de syntaxe avant « Hdbc »
exemple.c:13: attention : la définition de données n'a pas de type ni de classe de stockage
exemple.c: In function `main':
exemple.c:22: erreur: « RETCODE » non déclaré (première utilisation dans cette fonction)
exemple.c:22: erreur: (Chaque identificateur non déclaré est rapporté une seule fois
exemple.c:22: erreur: pour chaque fonction dans laquelle il apparaît.)
exemple.c:22: erreur: erreur de syntaxe avant « rc »
exemple.c:23: erreur: « SQLHSTMT » non déclaré (première utilisation dans cette fonction)
exemple.c:27: erreur: « SQLINTEGER » non déclaré (première utilisation dans cette fonction)
exemple.c:34: erreur: « rc » non déclaré (première utilisation dans cette fonction)
exemple.c:34: erreur: « SQL_HANDLE_ENV » non déclaré (première utilisation dans cette fonction)
exemple.c:35: erreur: « SQL_SUCCESS » non déclaré (première utilisation dans cette fonction)
exemple.c:35: erreur: « SQL_SUCCESS_WITH_INFO » non déclaré (première utilisation dans cette fonction)
exemple.c:36: erreur: « SQL_NULL_HSTMT » non déclaré (première utilisation dans cette fonction)
exemple.c:38: erreur: « SQL_ATTR_ODBC_VERSION » non déclaré (première utilisation dans cette fonction)
il ne reconnait pas plein de bibliothèques sql.h , sqlext.h , ...
je ne sais pas comment ajouter ces bibliothèques ou comment vérifier s'il existent

qqun peut me guider svp