begin process at 2012 05 29 10:18:24
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Base de données

 > 

ecrire dans une base de données access grâce à ODBC


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

ecrire dans une base de données access grâce à ODBC

mardi 11 février 2003 à 16:02:40 | ecrire dans une base de données access grâce à ODBC

volcomboy1

Bonjour
Pourriez vous m'expliquer comment on fait pour créer des nouveau champs et des nouveau enregistrements dans une base de données acces grâce a odbc sous visual c++. Merci
mardi 11 février 2003 à 20:15:23 | Re : ecrire dans une base de données access grâce à ODBC

BruNews

Administrateur CodeS-SourceS
voici un exemple en 1 seul fichier.

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

#pragma comment(lib, "odbc32.lib")

HINSTANCE hinst;
SQLHANDLE henv, hconn;
char szbuff[1024];
char *szappname = "Requete";

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:
}
}

int OdbcConnEnvCreate()
{
SQLRETURN retcd;
retcd = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
if(retcd == SQL_SUCCESS) goto envOK;
if(retcd == SQL_SUCCESS_WITH_INFO) goto envOK;
strcpy(szbuff, "Environment handle allocation failed");
goto errMsg;
envOK:
retcd = SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3,0);
if(retcd == SQL_SUCCESS) goto versOK;
if(retcd == SQL_SUCCESS_WITH_INFO) goto versOK;
strcpy(szbuff, "ODBC version incorrecte");
goto envOut;
versOK:
retcd = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hconn);
if((retcd == SQL_SUCCESS) || (retcd == SQL_SUCCESS_WITH_INFO)) return 1;
strcpy(szbuff, "Connection handle allocation failed");
envOut:
SQLFreeHandle(SQL_HANDLE_ENV, henv);
errMsg:
MessageBox(0, szbuff, szappname, MB_ICONERROR);
return 0;
}

int OdbcMdbConnect(int bReadOnly, char* dbname, char* dbpwd)
{ // dbname et dbpwd en options
// dbpwd pris en compte SI dbname est fourni
SQLRETURN retcd;
if(bReadOnly)
SQLSetConnectAttr(hconn, SQL_ATTR_ACCESS_MODE, (SQLPOINTER)SQL_MODE_READ_ONLY, 0);
char *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);
if((retcd == SQL_SUCCESS) || (retcd == SQL_SUCCESS_WITH_INFO)) return 1;
SQLFreeHandle(SQL_HANDLE_DBC, hconn);
SQLFreeHandle(SQL_HANDLE_ENV, henv);
return 0;
}

int OdbcExecAction(char *pszqry)
{ // return != 0 SI ERREUR
SQLHANDLE hstmt;
SQLRETURN retcd;
retcd = SQLAllocHandle(SQL_HANDLE_STMT, hconn, &hstmt);
if(retcd & 0xFFFE) return 1;
retcd = SQLExecDirect(hstmt, (SQLCHAR*)pszqry, 60);
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
return (retcd & 0xFFFE);
}

void AppPathInitialize()
{
char szThis[300];
char* c = szThis + GetModuleFileName(NULL, szThis, 300);
while(*c != '\\') c--; *c = 0;
SetCurrentDirectory(szThis);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PSTR, int)
{
hinst = hInstance;
AppPathInitialize();
if(!OdbcConnEnvCreate()) return 0;
if(!OdbcMdbConnect(0, "Mybase.mdb", 0)) return 0;
MessageBox(0, "OUVERT", szappname, MB_ICONINFORMATION);
//if(!OdbcExecAction("CREATE TABLE T7 (a INTEGER, b INTEGER, c TIMESTAMP)"))
// MessageBox(0, "QUERY OK", szappname, MB_ICONINFORMATION);
if(!OdbcExecAction("SELECT * INTO T2 IN Tmp.mdb FROM T1 WHERE a < 10"))
MessageBox(0, "QUERY OK", szappname, MB_ICONINFORMATION);
SQLDisconnect(hconn);
SQLFreeHandle(SQL_HANDLE_DBC, hconn);
SQLFreeHandle(SQL_HANDLE_ENV, henv);
return 0;
}

ciao...

-------------------------------
Réponse au message :
-------------------------------

> Bonjour
> Pourriez vous m'expliquer comment on fait pour créer des nouveau champs et des nouveau enregistrements dans une base de données acces grâce a odbc sous visual c++. Merci
jeudi 27 mai 2004 à 10:31:42 | Re : ecrire dans une base de données access grâce à ODBC

yAAm

Bonjour Mr bruNeuwws à qui j'ai deja eu à faire pour ce genre de sujet, mais quelque chose me titille les synapses : le "c" n'est pas un tableau, mais tu ecrit derriere le "premier element" pointé par c ?/!! comprend po
jeudi 27 mai 2004 à 10:37:07 | Re : ecrire dans une base de données access grâce à ODBC

BruNews

Administrateur CodeS-SourceS
Je ne sais pas de quelle ligne tu parles mais en general j'emploie 'c' en pointeur char* donc je ne vois pas ou serait le probleme.

ciao...
BruNews, Admin CS, MVP Visual C++
mardi 8 juin 2004 à 15:20:11 | Re : ecrire dans une base de données access grâce à ODBC

sarl_adc

Hello,

J'ai testé ce code et il fonctionne pas mal du tout !

En revanche, j'avais une question-complément à poser :
Je voudrais ajouter un enregistrement dans une base en "Pervasive SQL 2000 (SP3)" mais avec ce code je n'y arrive pas.

Je ne m'y connais pas vraiment en gestion de bdd en C++ (Je n'y touche qu'en VB) et je galère pas mal.
Pour vulgariser, je peux dire que je n'ai pas de ligne de type :
"DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" dans ma chaine de connexion avec Pervasive, mais :
"Provider=MSDASQL.1;Persist Security Info=False;Data Source=base_test".

Comment je peux intégrer cela dans ce code ? J'ai tout essayé et il m'est impossible de faire quoi que ce soit, il refuse tout simplement de se connecter...

Merci par avance,



Cette discussion est classée dans : access, base, données, odbc, ecrire


Répondre à ce message

Sujets en rapport avec ce message

ecrire dans une base de données access [ par revelata ] C'est encore moi qui me pose pleins de questions!Je voudrais ecrire dans une base access il me faudrait des exemples!Merci d'avance Ouvrir une base de données Access et ecrire dedans [ par patoudesuite ] patoudesuiteSalut j'ai encore et toujours besoin de vous.Je cherche à ouvrir et ecrire dans une BD access à travers un fichier TXT. Merci de votre aid base de données access sous Visual C++ [ par flexifoil1664 ] bonjour, je suis nouveau sous Visual C++ et mon application devra etre capable d'ouvrir un base de donnée access et modifier les champs. Etant donné q Champ non renseigné dans une base de données Access [ par aienkien ] Voila le problème. J'ai une application VC++ qui ouvre une connection avec une base de données Access.J'arrive à récupérer la valeur des champs sans p Trames vers base de données ACCESS [ par makandja ] Salut à tous, J'aimerais réaliser un module logiciel réalisant la transformation d'un fichier texte de mesures en base de données de type Microsoft A Connexion base de données Access 2000 [ par curator68 ] Je suis entrain de faire un petit programme à l'aide de Visual C++ 6.0, et j'aimerai accèder à une base de données access 2000 et ses différentes tabl Lecture et ecriture d'une base de données access [ par thino ] SalutJe voudrai avoir un code pour accéder à ma base de données sur access par la methode d'accès DAO. (VC++6) Récupérer le type de base de données d'un lien ODBC [ par vow ] Bonjour,J'ai une base de données avec sa liaison ODBC en DSN Système ("DSN1" par exemple).J'aimerais récuperer (en langage C sur Visual C++) le type d connexion à une base de données Access en Visual C++ [ par desquesa ] Bonjour tous le monde,Je suis en stage et j'ai un petit programme à réaliser.En fait je débute totalement en C++.Bref mon programme consiste à mettre accéder à une base de données access avec Visual C++ 6.0 [ par ludo_it ] salut je voudrais savoir comment faire pour se connecter, lire et écrire sur une base de données access en utilisant la méthode ADO avec Visual C++. J


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
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,733 sec (4)

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