begin process at 2010 02 10 05:28:13
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Base de données

 > 

XML

 > 

[Visual C++ 6] Connecxion ODBC


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

[Visual C++ 6] Connecxion ODBC

mercredi 21 mars 2007 à 22:06:34 | [Visual C++ 6] Connecxion ODBC

kharrat

Salut,

Je travaille sous VC++ 6.
J'essaie d'écrire un prog tout simple pour m'entraîner à utiliser des bases de données.

Pour ce faire, je souhaite utiliser un driver ODBC en incluant

#include <afxdb.h>

Le compilo me retourne l'erreur suivante à l'édition de lien:

nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in libcpd.lib(delop.obj)
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
Debug/Carnet.exe : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.

Etant donner qu'il semble être très facile d'utiliser un driver ODBC avec VC++ 6, je me demande si mon ordi est correctement installé (?), si les .h sont bien au bon endroit ou s'il ne m'en manque pas !

Une idée quelqu'un ?

+,
Kharrat
mercredi 21 mars 2007 à 22:22:12 | Re : [Visual C++ 6] Connecxion ODBC

BruNews

Administrateur CodeS-SourceS

afxdb.h d'aucune utilté pour ODBC.

#define _WIN32_WINNT 0x0600
#include <windows.h>

#include <sql.h>
#include <sqlext.h>
#pragma comment(lib, "odbc32.lib")


ciao...
BruNews, MVP VC++

mercredi 21 mars 2007 à 22:31:32 | Re : [Visual C++ 6] Connecxion ODBC

kharrat

Salut BruNews,

Merci pour ta réponse expresse.

Elle suscite pourtant plusieurs questions ! ;)

1. Je souhaite utiliser la classe CDatabase. Sur la msdn, j'ai trouvé que son header est afxdb.h. Cela veut-il dire que l'information que j'ai trouvée est inexacte ? ou utilises-tu une autre classe pour te connecter et lancer des requêtes dans la base ?

2. A quoi sert le #define _WIN32_WINNT 0x0600

3. Que veux dire le #pragma comment(lib, "odbc32.lib") et à quoi sert-il ?

Merci d'avance pour tes réponses :)

++,
Kharrat
mercredi 21 mars 2007 à 22:36:28 | Re : [Visual C++ 6] Connecxion ODBC

BruNews

Administrateur CodeS-SourceS
ouhh là, je t'ai mis ce qu'il faut pour du direct API ODBC, pas des classes prémachées.

ciao...
BruNews, MVP VC++
mercredi 21 mars 2007 à 22:51:22 | Re : [Visual C++ 6] Connecxion ODBC

kharrat

Pour info,

J'ai réussi à me connecter à ma base avec la classe CDatabase. Pour la faire marcher, il faut mettre les settings de son projet VC++ 6 avec Use MFC in a shared DLL, dans les options générales.

Pour le reste, ma chaîne de connexion n'est pas encore au point (boîte de dialogue qui s'ouvre quand je me connecte), mais ça marche !

++,
Kharrat
mercredi 21 mars 2007 à 22:56:15 | Re : [Visual C++ 6] Connecxion ODBC

BruNews

Administrateur CodeS-SourceS

A mon avis, c'est pas avec des bidules classes que tu apprendras grand chose d'ODBC, surtout que c'est assez simple en prenant un peu l'habitude.
Regarde exemple dessous, tu obtiens un exe de 3 Ko et sans aucune dépendance, tu files l'exe et il tourne sur tout Windows 32 bits.

Exemple d'emploi ODBC

On va insérer 50 enregs dans une table Sql Server, instance nommée "Toto".
// Base "Test"
// TABLE "histos"
// Fld(0) : histID, INT32 AutoIncr
// Fld(1) : histDat, datetime(8)
// Fld(2) : histSit, char(4)
// Fld(3) : Qte, INT32

J'insère le champ histSit en mode binaire au lieu de text, évite au pilote de calculer sa longueur avant insertion.
J'incrémente la date et la quantité de 1 à chaque tour de boucle.
--------------------------------

#define _WIN32_WINNT 0x0600
#include <windows.h>

#include <sql.h>
#include <sqlext.h>
#pragma comment(lib, "odbc32.lib")


char szappname[] = "Histo";
char szCONN[] = "DRIVER=SQL Server;AnsiNPW=No;Trusted_Connection=Yes;AutoTranslate=No;SERVER=Bnx64\\Toto;DATABASE=Test";

SQLHANDLE henv, hconn;

int __stdcall OdbcConnEnvCreate()
{
  if(SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv) & 0xFFFE) goto errMsg;
  if(SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,0) & 0xFFFE) goto envOut;
  if(!(SQLAllocHandle(SQL_HANDLE_DBC, henv, &hconn) & 0xFFFE)) return 0;
envOut:
  SQLFreeHandle(SQL_HANDLE_ENV, henv);
errMsg:
  return MessageBox(0, "ODBC INDISPONILE", szappname, 0x30);
}

int __stdcall OdbcSqlConnect()
{ // RETOURNE STATUS ERREUR
  SQLRETURN rtcd;
  rtcd = SQLDriverConnect(hconn, 0, szCONN, 104 /*strlen(szCONN)*/, 0, 0, 0, SQL_DRIVER_NOPROMPT);
  return (rtcd & 0xFFFE);
}

void __stdcall testInsert()
{
  SQLHANDLE hstmt;
  char szsite[4];
  int dat, qte;
  int rdat = 0, rsit = 4, rqte = 0;
  int i;
 
  if(SQLAllocHandle(SQL_HANDLE_STMT, hconn, &hstmt) & 0xFFFE) return;
  if(SQLPrepare(hstmt, "INSERT INTO histos (histDat,histSit,Qte) VALUES (?,?,?)", SQL_NTS) & 0xFFFE) goto freeSTMT;

  if(SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_INTEGER, SQL_INTEGER, 0, 0, &dat, 0, &rdat) & 0xFFFE) goto freeSTMT;
  if(SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_BINARY, SQL_BINARY, 4, 0, szsite, 0, &rsit) & 0xFFFE) goto freeSTMT;
  if(SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_INTEGER, SQL_INTEGER, 0, 0, &qte, 0, &rqte) & 0xFFFE) goto freeSTMT;
 
  *((DWORD*) szsite) = 'ESUR';
  dat = 39160; // 39159 = 20/03/2007 - 2
  qte = 200;
  i = 50;
  do {
    if(SQLExecute(hstmt) & 0xFFFE) goto freeSTMT;
    dat++;
    qte++;
  } while(--i);
 
  MessageBox(0, "OK", szappname, 0);
 
freeSTMT: SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
}


#pragma comment(linker, "/entry:myWinMain")
__declspec(naked) void __stdcall myWinMain()
{
  __asm {
    call    OdbcConnEnvCreate
    test    eax, eax
    jne     short progEND
    call    OdbcSqlConnect
    test    eax, eax
    jne     short relHANDLES

    call    testInsert
   
closeCONN:
    push    hconn
    call    SQLDisconnect
relHANDLES:
    push    hconn
    push    SQL_HANDLE_DBC
    call    dword ptr SQLFreeHandle
    push    henv
    push    SQL_HANDLE_ENV
    call    dword ptr SQLFreeHandle
progEND:
    push    0
    call    dword ptr ExitProcess
  }
}



ciao...
BruNews, MVP VC++

mercredi 21 mars 2007 à 23:05:22 | Re : [Visual C++ 6] Connecxion ODBC

BruNews

Administrateur CodeS-SourceS
OUPS,
101 au lieu de 104 dans OdbcSqlConnect().

ciao...
BruNews, MVP VC++
jeudi 29 mars 2007 à 09:09:34 | Re : [Visual C++ 6] Connecxion ODBC

kharrat

BruNews,

Je suis en train de travailler sur ton code. Pour l'instant je n'arrive pas à le faire compiler.

Est-ce que je dois mettre des options particulières à la compilation ou à l'exécution, ou dans mes settings pour que ça marche ?

Merci,
Kharrat

jeudi 29 mars 2007 à 10:45:03 | Re : [Visual C++ 6] Connecxion ODBC

BruNews

Administrateur CodeS-SourceS
Tu fais un proj Win32 GUI et VIDE, compilation mode C et tu colles ce qui est plus haut.

ciao...
BruNews, MVP VC++
jeudi 7 juin 2007 à 18:00:23 | Re : [Visual C++ 6] Connecxion ODBC

Loki6

Membre Club
salut BruNews

j'essaie de compiler ton code, j'ai des erreurs sur toutes les chaines de caractères. apparemment c'est un problème entre WideChar et MultiByteChar.
que dois je faire ? caster à LPCWSTR ?

merci ++

Loki

1 2

Cette discussion est classée dans : odbc, utiliser, error, obj, lib


Répondre à ce message

Sujets en rapport avec ce message

(v6c++) - Le linking [ par lerilcy ] Je dois utiliser une CFile en Vc++6 et etrangement mon " #include "afx.h" " provoque une erreur lors du linkingVoici l'erreur:Compiling...file.cppLink So I need help again [ par lerilcy ] Je dois utiliser une CFile en Vc++6 et etrangement mon " #include "afx.h" " provoque une erreur lors du linkingVoici l'erreur:Compiling...file.cppLi pb de librairie [ par didrocks ] J'ai un problème lors de la complication de mon app en mode debug (et seulement en mode debug) avec vc++ 6.0:nafxcwd.lib(afxmem.obj) : error LNK2001: utiliser une librairie faite pour du C dans du C++??? [ par cartouh ] Bonjour,j'essaie d'utiliser la librairie CPDFLib (http://www.fastio.com/)je l'ai compilé sous visual comme ils disent dans la doc, j'obtient un .libje [Visual C++] Probleme de link d une dll avec code C et C++ [ par nebucad ] Bonjour tout le mondeJe suis sur un problème depuis quelques jours et j'en appelle donc à votre âme charitable pour régler ce problème que je rencontr [VC++6\wxWidgets] Problème à l'installation de v2.6.1 [ par Sunsawe ] Bonjour à tous. Je cherche donc à installer la dernière version à ce jour de wxWidgets avec VC++. Pour cela je suis le guide indiqué ici [url=http://w probleme lors utilise jrtplib sour Visual C++ 6, j'en peut plus!!! [ par maaxobelixyeye ] J'ai bien compilé la lib, et j'ai bien installé sp6, les sdk, bien indiqué le chemin de lib, src, mais vc++6 me dit : example2.obj : error LNK2001: u D'où vien l'erreur!!!? [ par mouminek ] Bonjour tout le monde, Je dois modifier dans un code ecrit en C++ dans VC++ 6.0. C'est un porogramme d'acquisition d'image utlisant un camera Apogee.. Probleme de librairie [ par KissyFroth ] J'ai un probleme avec une source que j'ai prise et que j'essaie vainement de compiler : Voilà l'erreur : nafxcwd.lib(afxmem.obj) : error LNK2005: "voi ODE : link errors à la compilation [ par Tibabou ] Bonjour,    Je souhaite utiliser ODE dans un programme. Malheureusement, la compilation pose problème (j'utilise Visual C++ 6 et je suis sous windows


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,718 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales