Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : ecrire dans une base de données access grâce à ODBC [ Archives / Base de données ] (volcomboy1)

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é 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...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 0,265 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.