IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

ODBC, sql server et c++


Sujet :

C++

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 10
    Points : 6
    Points
    6
    Par défaut ODBC, sql server et c++
    Bonjour !!
    méchant problème à vous soumettre (du moins a mes yeux pour le moment)
    je viens de créer une ressource necessaire dans ODBC pour me connecter a distance su mon server SQL... Le problème et que j'ai besoin de passer par un programme en c++ pour récupérer mes données... et je ne l'ai jamais fait !!
    Un peu d'aide sympose, lien internet (même en anglais).
    ou juste me dire si je suis sur la bone voie ou non.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    int main()
    {
    SQLCHAR dsn[] = "sqlserver", uid[] = "****", pwd[] = "****";
     
                    if ( !SQL_SUCCEEDED(SQLConnectW(con, dsn, SQL_NTS, uid, SQL_NTS, pwd, SQL_NTS)) )
                        fprintf(stderr, "La fonction SQLConnect a echoue.\n");
                    else
                    {
                   \\commande pour lire les tables que je ne métrise pas encore
                    }                       
    }

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 50
    Points : 60
    Points
    60
    Par défaut
    Bonjour,

    Je suis passé par la aussi.

    Je m'en suis sorti en utilisant la classe CDatabase (OpenEx) et la classe RecordSet pour les transactions.

    A+

  3. #3
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 379
    Points
    11 379
    Billets dans le blog
    10
    Par défaut
    OpenEX et consorts c'est du OLE DB, qui est plus lent que ODBC.
    Il te faut tout d'abord un initialiser ODBC au travers d'un SQLHENV :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    //SQLHENV m_hOdbcEnv;
    if( SqlSuccess( SQLAllocHandle( SQL_HANDLE_ENV, SQL_NULL_HANDLE, & m_hOdbcEnv ) ) )
    {
    	if( ! SqlSuccess( SQLSetEnvAttr( m_hOdbcEnv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, SQL_IS_INTEGER ), SQL_HANDLE_ENV, m_hOdbcEnv ) )
    	{
    		SQLFreeHandle( SQL_HANDLE_ENV, m_hOdbcEnv );
    		m_hOdbcEnv = SQL_NULL_HENV;
    	}
    }
    else
    {
    	m_hOdbcEnv = SQL_NULL_HENV;
    }
    Ensuite, pour te connecter, il te faut un HDBC (contexte de connexion) et le connecter à ta base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //HDBC m_hDbc;
    SQLAllocHandle( SQL_HANDLE_DBC, m_hOdbcEnv, & m_hDbc ), SQL_HANDLE_ENV, m_hOdbcEnv );
    std::string strConnexionString = "DRIVER={SQL Server}; SERVER=" + strServer + "; DATABASE=" + strDatabase + "; UID=" + strUser + "; PWD=" + strPassword + ";";
    SQLRETURN sqlReturn = SQLDriverConnect( m_hDbc, SQLHWND(NULL), (SqlChar*)strConnexionString.c_str(), SQL_NTS, NULL, 0, NULL, SQL_DRIVER_COMPLETE_REQUIRED );
    A partir de là tu peux exécuter des requêtes sur ton serveur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    //struct DATA_BINDING
    //{
    //	SQLSMALLINT TargetType;
    //	SQLPOINTER TargetValuePtr;
    //	SQLINTEGER BufferLength;
    //	SQLLEN StrLen_or_Ind;
    //};
    HSTMT hStmt; //=> Statement contenant le résultat de la requête
    // On initialise ce statement
    SqlSuccess( SQLAllocHandle( SQL_HANDLE_STMT, m_hDbc, & hStmt ), SQL_HANDLE_DBC, m_hDbc );
    // On exécute la requête
    if( SqlSuccess( SQLExecDirect( m_hStmt, (SqlChar*)strQuery.c_str(), SQLINTEGER( strQuery.size() ) ), SQL_HANDLE_STMT, hStmt, strQuery ) )
    {
    	// Ca a marchééé !!
    	int iBufferSize = 1024;
    	SQLSMALLINT iNbColumns;
    	char szBuffer[255];
    	SQLSMALLINT iResult;
    	SQLLEN iNumericAttribute;
    	std::string strName;
    	DATA_BINDING * pColumnData;
    	std::vector< sdt::pair< std::string, int > > arrayColumns;
    	// On récupère le nombre de colonnes
    	if( SqlSuccess( SQLNumResultCols( hStmt, & iNbColumns ), SQL_HANDLE_STMT, m_hStmt, strQuery ) && iNbColumns > 0 )
    	{
    		for( SQLSMALLINT i = 1 ; i <= iNbColumns ; i++ )
    		{
    			// Pour chaque colonne, on récupère son nom
    			if( SqlSuccess( SQLColAttribute( hStmt, i, SQL_DESC_LABEL, SQLPOINTER( szBuffer ), 255, & iResult, & iNumericAttribute ), SQL_HANDLE_STMT, hStmt, strQuery ) )
    			{
    				strName = szBuffer;
    				iResult = 0;
    				memset( szBuffer, 0, sizeof( szBuffer ) );
    				// Et son type
    				if( SqlSuccess( SQLColAttribute( m_hStmt, i, SQL_DESC_TYPE, SQLPOINTER( szBuffer ), 255, & iResult, & iNumericAttribute ), SQL_HANDLE_STMT, m_hStmt, strQuery ) )
    				{
    					// Le type est stocké dans iNumericAttribute
    					arrayColumns.push_back( std::make_pair( strName, iNumericAttribute ) );
    				}
    			}
    		}
    		// On initialise la sructure qui recevra chaque ligne du résultat
    		pColumnData = new DATA_BINDING[iNbColumns];
     
    		// On alloue la mémoire de ses champs
    		for( int i = 0 ; i < iNbColumns ; i++  )
    		{
    			pColumnData[i].TargetType = SQL_C_CHAR;
    			pColumnData[i].BufferLength = iBufferSize + 1;
    			pColumnData[i].TargetValuePtr = new unsigned char[pColumnData[i].BufferLength];
    		}
     
    		BOOL bResult = TRUE;
     
    		// On associe chaque colonne du statement aux colonnes e notre structure
    		for( int i = 0 ; i < iNbColumns && bResult ; i++  )
    		{
    			bResult = SqlSuccess( SQLBindCol( hStmt, ( SQLUSMALLINT )i + 1, pColumnData[i].TargetType, pColumnData[i].TargetValuePtr, pColumnData[i].BufferLength, &( pColumnData[i].StrLen_or_Ind ) ), SQL_HANDLE_STMT, hStmt, strQuery );
    		}
     
    		std::string strFieldValue;
    		// On parcourt maintenant les lignes du résultat
    		while( SqlSuccess( SQLFetch( hStmt ), SQL_HANDLE_STMT, hStmt ) )
    		{
    			strFieldValue = (char*)pColumnData[i].TargetValuePtr;
    			// Tu peux maintenant faire ce que tu veux de la valeur, en fonction du type de la colonne.
    		}
     
    		// free memory from the binding
    		for( int i = 0 ; i < iNbColumns ; i++  )
    		{
    			delete [] pColumnData[i].TargetValuePtr;
    		}
     
    		delete [] pColumnData;
     
    		SqlSuccess( SQLCloseCursor( hStmt ), SQL_HANDLE_STMT, hStmt );
    	}
    }
    if( hStmt != SQL_NULL_HSTMT )
    {
    	SQLFreeHandle( SQL_HANDLE_STMT, hStmt );
    }
    Une fois que tu as tout terminé avec ta bdd, tu fais un cleanup :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if( m_hDbc != SQL_NULL_HDBC )
    {
    	SQLDisconnect( m_hDbc );
    	SQLFreeHandle( SQL_HANDLE_DBC, m_hDbc );
    	m_hDbc = NULL;
    }
    if( m_hOdbcEnv != SQL_NULL_HENV )
    {
    	SQLFreeHandle( SQL_HANDLE_ENV, m_hOdbcEnv );
    	m_hOdbcEnv = SQL_NULL_HENV;
    }
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  4. #4
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 10
    Points : 6
    Points
    6
    Par défaut yeah
    Merci avous deux,
    je vais faire des tests,
    et je vous revient avec des nouvelles... Bonne j'espère

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 10
    Points : 6
    Points
    6
    Par défaut test
    Allo,
    j'ai fait mon petit code et il me met des erreurs incomprehensible pour moi un peu d'aide svp...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    #include "StdAfx.h"
    #include "iostream"
    #include "windows.h"
    #include "sqltypes.h"
    #include "sql.h"
    #include "sqlext.h"
     
    using namespace std;
     
    void show_error(unsigned int handletype, const SQLHANDLE& handle){
    	SQLCHAR sqlstate[1024];
        SQLCHAR message[1024];
    	if(SQL_SUCCESS == SQLGetDiagRec(handletype, handle, 1, sqlstate, NULL, message, 1024, NULL))
            cout<<"Message: "<<message<<"\nSQLSTATE: "<<sqlstate<<endl;
    }
     
    int main(){
    	//for example
    char* dsnName ="sqlserver";
    char* userID = "*****";
    char* passwd = "****";
    char* retVal[256];
    unsigned int cbData;
     
    SQLHANDLE sqlenvhandle = SQL_NULL_HANDLE; 
    SQLHANDLE sqlconnectionhandle = SQL_NULL_HANDLE;
    SQLHANDLE sqlstatementhandle = SQL_NULL_HANDLE;
        SQLRETURN retcode;
     
        if(SQL_SUCCESS!=SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &sqlenvhandle))
            goto FINISHED;
     
        if(SQL_SUCCESS!=SQLSetEnvAttr(sqlenvhandle,SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0)) 
            goto FINISHED;
     
        if(SQL_SUCCESS!=SQLAllocHandle(SQL_HANDLE_DBC, sqlenvhandle, &sqlconnectionhandle))
            goto FINISHED;
     
    	SQLConnect(sqlconnectionhandle, (SQLCHAR*)dsnName,SQL_NTS,(SQLCHAR*)userID,SQL_NTS, (SQLCHAR*)passwd, SQL_NTS);
     
     
        if(SQL_SUCCESS!=SQLAllocHandle(SQL_HANDLE_STMT, sqlconnectionhandle, &sqlstatementhandle))
            goto FINISHED;
     
        if(SQL_SUCCESS!=SQLExecDirect(sqlstatementhandle, (SQLCHAR*)"select * from tblTag", SQL_NTS)){
            show_error(SQL_HANDLE_STMT, sqlstatementhandle);
            goto FINISHED;
        }
        else{
            char name[64];
            char address[64];
            int id;
            while(SQLFetch(sqlstatementhandle)==SQL_SUCCESS){
                SQLGetData(sqlstatementhandle, 1, SQL_C_ULONG, &id, 0, NULL);
                SQLGetData(sqlstatementhandle, 2, SQL_C_CHAR, name, 64, NULL);
                SQLGetData(sqlstatementhandle, 3, SQL_C_CHAR, address, 64, NULL);
                cout<<id<<" "<<name<<" "<<address<<endl;
            }
        }
     
    FINISHED:
        SQLFreeHandle(SQL_HANDLE_STMT, sqlstatementhandle );
        SQLDisconnect(sqlconnectionhandle);
        SQLFreeHandle(SQL_HANDLE_DBC, sqlconnectionhandle);
        SQLFreeHandle(SQL_HANDLE_ENV, sqlenvhandle);
     
    }
    voici les erreurs :
    1>sql.cpp(14): error C2664: 'SQLGetDiagRecW'*: impossible de convertir le paramètre 4 de 'SQLCHAR [1024]' en 'SQLWCHAR *'
    1> Les types pointés n'ont aucun rapport entre eux*; conversion nécessitant reinterpret_cast, cast de style C ou cast de style fonction
    1>sql.cpp(40): error C2664: 'SQLConnectW'*: impossible de convertir le paramètre 2 de 'SQLCHAR *' en 'SQLWCHAR *'
    1> Les types pointés n'ont aucun rapport entre eux*; conversion nécessitant reinterpret_cast, cast de style C ou cast de style fonction
    1>sql.cpp(46): error C2664: 'SQLExecDirectW'*: impossible de convertir le paramètre 2 de 'SQLCHAR *' en 'SQLWCHAR *'

    merci pour le coup de main

  6. #6
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 379
    Points
    11 379
    Billets dans le blog
    10
    Par défaut
    Apparemment tu compiles en unicode, il faut donc que tu remplaces SQLCHAR par SQLTCHAR, char par TCHAR et que tu entoures tes chaines de caractères avec _T() (ex: TCHAR szCoin = _T( "coin!!" ) )pour te dédouaner de ce genre de problèmes
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 10
    Points : 6
    Points
    6
    Par défaut probleme jeton
    allo,
    probleme resolu mais qui en a engendrer de nouveau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    // sql.cpp : fichier projet principal.
     
    #include "StdAfx.h"
    #include "initguid.h"
    #include "iostream"
    #include "windows.h"
    #include "sqltypes.h"
    #include "sql.h"
    #include "sqlext.h"
     
    #pragma comment(lib, "User32.lib")
    #pragma comment(lib, "oleaut32.lib")
    #pragma comment(lib, "ole32.lib") 
     
     
    using namespace std;
     
    void show_error(unsigned int handletype, const SQLHANDLE& handle){
           SQLTCHAR sqlstate[1024];
        SQLTCHAR message[1024];
           if(SQL_SUCCESS == SQLGetDiagRecW(handletype, handle, 1, sqlstate, NULL,message, 1024, NULL))
            cout<<"Message: "<<message<<"\nSQLSTATE: "<<sqlstate<<endl;
    }
     
    int main(){
           //for example
    TCHAR* dsnName =L"sqlserver";
    TCHAR* userID =L"*******";
    TCHAR* passwd =L"*******";
    TCHAR* retVal[256];
    unsigned int cbData;
     
    SQLHANDLE sqlenvhandle = SQL_NULL_HANDLE; 
    SQLHANDLE sqlconnectionhandle = SQL_NULL_HANDLE;
    SQLHANDLE sqlstatementhandle = SQL_NULL_HANDLE;
        SQLRETURN retcode;
     
        if(SQL_SUCCESS!=SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &sqlenvhandle))
            goto FINISHED;
     
        if(SQL_SUCCESS!=SQLSetEnvAttr(sqlenvhandle,SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0)) 
            goto FINISHED;
     
        if(SQL_SUCCESS!=SQLAllocHandle(SQL_HANDLE_DBC, sqlenvhandle, &sqlconnectionhandle))
            goto FINISHED;
     
           SQLConnectW(sqlconnectionhandle, (SQLTCHAR*)dsnName,SQL_NTS,(SQLTCHAR*)userID,SQL_NTS, (SQLTCHAR*)passwd, SQL_NTS);
     
     
        if(SQL_SUCCESS!=SQLAllocHandle(SQL_HANDLE_STMT, sqlconnectionhandle, &sqlstatementhandle))
            goto FINISHED;
     
        if(SQL_SUCCESS!=SQLExecDirectW(sqlstatementhandle, (SQLTCHAR*)"select * from tblTag", SQL_NTS)){
            show_error(SQL_HANDLE_STMT, sqlstatementhandle);
            goto FINISHED;
        }
        else{
            TCHAR name[64];
            TCHAR address[64];
            int id;
            while(SQLFetch(sqlstatementhandle)==SQL_SUCCESS){
                SQLGetData(sqlstatementhandle, 1, SQL_C_ULONG, &id, 0, NULL);
                SQLGetData(sqlstatementhandle, 2, SQL_C_TCHAR, name, 64, NULL);
                SQLGetData(sqlstatementhandle, 3, SQL_C_TCHAR, address, 64, NULL);
                cout<<id<<" "<<name<<" "<<address<<endl;
            }
        }
     
    FINISHED:
        SQLFreeHandle(SQL_HANDLE_STMT, sqlstatementhandle );
        SQLDisconnect(sqlconnectionhandle);
        SQLFreeHandle(SQL_HANDLE_DBC, sqlconnectionhandle);
        SQLFreeHandle(SQL_HANDLE_ENV, sqlenvhandle);
        return 0;
    }
    voici mes erreurs :
    sql.obj : error LNK2028: jeton non résolu (0A000343) "extern "C" short __stdcall SQLDisconnect(void *)" (?SQLDisconnect@@$$J14YGFPAX@Z) référencé dans la fonction "int __cdecl main(void)" (?main@@$$HYAHXZ)
    1>sql.obj : error LNK2028: jeton non résolu (0A000344) "extern "C" short __stdcall SQLFreeHandle(short,void *)" (?SQLFreeHandle@@$$J18YGFFPAX@Z) référencé dans la fonction "int __cdecl main(void)" (?main@@$$HYAHXZ)
    1>sql.obj : error LNK2028: jeton non résolu (0A000345) "extern "C" short __stdcall SQLGetData(void *,unsigned short,short,void *,long,long *)" (?SQLGetData@@$$J224YGFPAXGF0JPAJ@Z) référencé dans la fonction "int __cdecl main(void)" (?main@@$$HYAHXZ)
    1>sql.obj : error LNK2028: jeton non résolu (0A000346) "extern "C" short __stdcall SQLFetch(void *)" (?SQLFetch@@$$J14YGFPAX@Z) référencé dans la fonction "int __cdecl main(void)" (?main@@$$HYAHXZ)
    1>sql.obj : error LNK2028: jeton non résolu (0A000347) "extern "C" short __stdcall SQLExecDirectW(void *,wchar_t *,long)" (?SQLExecDirectW@@$$J212YGFPAXPA_WJ@Z) référencé dans la fonction "int __cdecl main(void)" (?main@@$$HYAHXZ)
    1>sql.obj : error LNK2028: jeton non résolu (0A000348) "extern "C" short __stdcall SQLConnectW(void *,wchar_t *,short,wchar_t *,short,wchar_t *,short)" (?SQLConnectW@@$$J228YGFPAXPA_WF1F1F@Z) référencé dans la fonction "int __cdecl main(void)" (?main@@$$HYAHXZ)
    1>sql.obj : error LNK2028: jeton non résolu (0A000349) "extern "C" short __stdcall SQLSetEnvAttr(void *,long,void *,long)" (?SQLSetEnvAttr@@$$J216YGFPAXJ0J@Z) référencé dans la fonction "int __cdecl main(void)" (?main@@$$HYAHXZ)
    1>sql.obj : error LNK2028: jeton non résolu (0A00034A) "extern "C" short __stdcall SQLAllocHandle(short,void *,void * *)" (?SQLAllocHandle@@$$J212YGFFPAXPAPAX@Z) référencé dans la fonction "int __cdecl main(void)" (?main@@$$HYAHXZ)
    1>sql.obj : error LNK2028: jeton non résolu (0A00034C) "extern "C" short __stdcall SQLGetDiagRecW(short,void *,short,wchar_t *,long *,wchar_t *,short,short *)" (?SQLGetDiagRecW@@$$J232YGFFPAXFPA_WPAJ1FPAF@Z) référencé dans la fonction "void __cdecl show_error(unsigned int,void * const &)" (?show_error@@$$FYAXIABQAX@Z)
    1>sql.obj : error LNK2019: symbole externe non résolu "extern "C" short __stdcall SQLGetDiagRecW(short,void *,short,wchar_t *,long *,wchar_t *,short,short *)" (?SQLGetDiagRecW@@$$J232YGFFPAXFPA_WPAJ1FPAF@Z) référencé dans la fonction "void __cdecl show_error(unsigned int,void * const &)" (?show_error@@$$FYAXIABQAX@Z)
    1>sql.obj : error LNK2019: symbole externe non résolu "extern "C" short __stdcall SQLDisconnect(void *)" (?SQLDisconnect@@$$J14YGFPAX@Z) référencé dans la fonction "int __cdecl main(void)" (?main@@$$HYAHXZ)
    1>sql.obj : error LNK2019: symbole externe non résolu "extern "C" short __stdcall SQLFreeHandle(short,void *)" (?SQLFreeHandle@@$$J18YGFFPAX@Z) référencé dans la fonction "int __cdecl main(void)" (?main@@$$HYAHXZ)
    1>sql.obj : error LNK2019: symbole externe non résolu "extern "C" short __stdcall SQLGetData(void *,unsigned short,short,void *,long,long *)" (?SQLGetData@@$$J224YGFPAXGF0JPAJ@Z) référencé dans la fonction "int __cdecl main(void)" (?main@@$$HYAHXZ)
    1>sql.obj : error LNK2019: symbole externe non résolu "extern "C" short __stdcall SQLFetch(void *)" (?SQLFetch@@$$J14YGFPA.......................

  8. #8
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 379
    Points
    11 379
    Billets dans le blog
    10
    Par défaut
    Il te manque juste la lib qui va bien, si je me souviens bien, c'est odbc32.lib
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  9. #9
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 10
    Points : 6
    Points
    6
    Par défaut thx
    yeah, merci a vous, sa marche avec odbc32,
    petit souci de droit pour me connecter masi sa sa n'as pas de rapport avec le programme, merci beaucoup au plaisir !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/01/2007, 10h48
  2. [Microsoft][ODBC SQL Server] 6 + ASP
    Par Opo dans le forum ASP
    Réponses: 2
    Dernier message: 21/11/2006, 08h45
  3. Lien ODBC SQL Server
    Par Praline dans le forum Oracle
    Réponses: 1
    Dernier message: 20/10/2006, 14h04
  4. Creation de ODBC sql Server
    Par lessoy dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 26/05/2006, 15h11
  5. ODBC SQL Server VC++
    Par afan dans le forum MFC
    Réponses: 10
    Dernier message: 19/03/2004, 10h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo