| 12
 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