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 84 85 86 87 88
| // header
#include <windows.h>
#include <sql.h>
#include <sqlext.h>
// la librairie utilisé pour l'acces a la base
#pragma comment(lib, "odbc32.lib")
__inline char* bnstrcpy(char *dst, char *src) // return ptr sur NULL final
{
__asm {
mov eax, dst
mov ecx, src
dec eax
LcpyLoop:
mov dl, [ecx]
inc eax
inc ecx
mov [eax], dl
or dl, dl
jz short LcpyOut
mov dl, [ecx]
inc eax
inc ecx
mov [eax], dl
or dl, dl
jz short LcpyOut
mov dl, [ecx]
inc eax
inc ecx
mov [eax], dl
or dl, dl
jnz short LcpyLoop
LcpyOut:
}
}
// te permet de créé un environnmeent odbc pour connection a la bd
int OdbcConnEnvCreate()
{
SQLRETURN retcd;
retcd = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
if(retcd & 0xFFFE) return 0;
retcd = SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3,0);
if(retcd & 0xFFFE) goto envOut;
retcd = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hconn);
if(!(retcd & 0xFFFE)) return 1;
envOut:
SQLFreeHandle(SQL_HANDLE_ENV, henv);
return 0;
}
// pour acceder a la bd
int __stdcall OdbcMdbConnect(int bReadOnly, char* dbname, char* dbpwd)
{ // dbname et dbpwd en options
// dbpwd pris en compte SI dbname est fourni
SQLRETURN retcd;
char *c;
if(bReadOnly)
SQLSetConnectAttr(hconn, SQL_ATTR_ACCESS_MODE, (SQLPOINTER)SQL_MODE_READ_ONLY, 0);
c = bnstrcpy(szbuff, "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=");
if(dbname) {
if(dbname[0]) {
c = bnstrcpy(c, dbname);
if(dbpwd) {
if(dbpwd[0]) {
*c = ';'; *(c+1) = 'P'; *(c+2) = 'W'; *(c+3) = 'D'; *(c+4) = '=';
c = bnstrcpy(c+5, dbpwd);
}
}
}
}
retcd = SQLDriverConnect(hconn, 0, (SQLCHAR*)szbuff, c - szbuff,
0, 0, 0, SQL_DRIVER_COMPLETE_REQUIRED);
return ((retcd & 0xFFFE) == 0);
}
// te permet de lancer une requete
int __stdcall OdbcExecAction(char *pszqry) // RETOURNE != 0 SI ERREUR
{
SQLHANDLE hstmt;
SQLRETURN retcd;
retcd = SQLAllocHandle(SQL_HANDLE_STMT, hconn, &hstmt);
if(retcd & 0xFFFE) return 1; // ERREUR
retcd = SQLExecDirect(hstmt, (SQLCHAR*)pszqry, 60);
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
return (retcd & 0xFFFE);
} |
Partager