begin process at 2012 05 29 23:55:26
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Base de données

 > 

LIEN source ODBC


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

LIEN source ODBC

mardi 20 janvier 2004 à 13:38:53 | LIEN source ODBC

psycomel

Membre Club

Bonjour.
J'aurais aimé savoir comment j'aurais pu générer automatiquement une source odbc.

Par exemple j'ai ma base Access dans le meme repertoire que mon projet et automatiquement dans mon projet je créee cette base Access comme source ODBC.

Merci d'avance 10000 fois.


mardi 20 janvier 2004 à 14:17:23 | Re : LIEN source ODBC

BruNews

Administrateur CodeS-SourceS
#include <windows.h>
#include <sql.h>
#include <sqlext.h>
#include "McrAsm.h"

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

HINSTANCE hinst;
SQLHANDLE henv, hconn;
long lerror = 0;

char szbuff[1024];
char szappname[] = "Connect";

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 unic, int rdonly, char* dbname, char* dbpwd) // les 2 char* options
{
SQLRETURN retcd;
retcd = SQLSetConnectAttr(hconn, SQL_ATTR_ACCESS_MODE, (SQLPOINTER)SQL_MODE_READ_ONLY, 0);
char *c = bnstrcpy(szbuff, "DRIVER={Microsoft Access Driver (*.mdb)};");
if(unic) c = bnstrcpy(c, "EXCLUSIVE=1;");
*c = 'D'; *(c+1) = 'B'; *(c+2) = 'Q'; *(c+3) = '='; *(c+4) = 0;
if(rdonly) SQLSetConnectAttr(hconn, SQL_ATTR_ACCESS_MODE, (SQLPOINTER)SQL_MODE_READ_ONLY, 0);
if(dbname) {
c += 4;
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;
}

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(1 , 0, "Mybase.mdb", 0)) return 0;

MessageBox(0, "OK", szappname, MB_ICONINFORMATION);
SQLDisconnect(hconn);
SQLFreeHandle(SQL_HANDLE_DBC, hconn);
SQLFreeHandle(SQL_HANDLE_ENV, henv);
return 0;
}

BruNews, ciao...
mardi 20 janvier 2004 à 17:13:47 | Re : LIEN source ODBC

psycomel

Membre Club
Je te remercie deja pour cet apport.

mais, dan ta procédure OdbcMdbConnect, tu te sert de bnstrcpy()
. apparement cela n'est pa reconnu . et il met plein d'erreur de cast. peutetr que c'est une fonction perso contenue dans #include "McrAsm.h"
que d'ailleur je sui obligée de mettre en commentaire. !!
Donc que faire?

Je suppose aussi que la fonction int WINAPI Winmain est la fonction prinicpale. Je ne sais pas si qu'en il n'y auras plus d'erreur j'arriverais a faire marcher cette fonction car elle se balade un peu nulle part. Mais plutot faudra-t-il que je l'intergre kkpart. Mais pour ma culture perso, si tu pouvais mexpliquer en clair quel est ce type HINSTANCE.? PSTR ?

Répond surtout à la premiere question . Je te remercie Brunews

mardi 20 janvier 2004 à 17:28:15 | Re : LIEN source ODBC

BruNews

Administrateur CodeS-SourceS
bnstrcpy en C:
inline char* bnstrcpy(char *dst, char *src)
{
while(*dst = *src++) dst++;
}

donc retourne ptr sur le null de fin de copie, ce qui evite les strcat stupides.

int WINAPI Winmain est le point d'entree d'un prog win32.

BruNews, ciao...
mardi 20 janvier 2004 à 17:30:12 | Re : LIEN source ODBC

BruNews

Administrateur CodeS-SourceS
OUPS oubli du return:
inline char* bnstrcpy(char *dst, char *src)
{
while(*dst = *src++) dst++;
return dst;
}


BruNews, ciao...
mardi 20 janvier 2004 à 20:21:33 | Re : LIEN source ODBC

vecchio56

Administrateur CodeS-SourceS
on pourrait pareil utiliser strcpy non? mais je crois savoir que bnstrcpy à une homologue écrit en asm beaucoup plus efficace!
mardi 20 janvier 2004 à 20:32:39 | Re : LIEN source ODBC

BruNews

Administrateur CodeS-SourceS
et non pas de strcpy qui est con comme une valise, il retourne pointeur sur debut de chaine ce qui oblige au strcat a suivre et ainsi on peut parcourir toute la chaine 50 fois.
<La mienne donne pointeur sur fin de copie, une chaine ne sera jamais parcourue qu'1 seule fois.
Passons le cas de l'ASM ou bien entendu je deroule la boucle, ce qui la rend bien plus efficace sur longues distances.
BruNews, ciao...


Cette discussion est classée dans : base, odbc, source, lien, automatiquement


Répondre à ce message

Sujets en rapport avec ce message

Problème de connexion ODBC sous Windows 7 [ par nico_44 ] Bonjour à toutes et à tous, Je developpe en VC++ 2005 une application qui se connecte via ODBC à une base Access 2003. Quel que soit l'OS, en local ecrire dans une base de données access grâce à ODBC [ par volcomboy1 ] BonjourPourriez 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 o ODBC jeu d'enregistrement en lecture seule? [ par seraphy ] Bonjour à tous,je voudrais développer un outil permettant de modifier, supprimer et ajouter d'un enregistrement d'une la base donnée access. J'utilise base de donnée acces sous odbc [ par gwada3 ] BonjourJ'ai une base acces avec plusieurs tables et j'aimerais savoir comment, dans mon programme fait avec les mfc , accéder à une tables en particul liaison base de données [ par lola0608 ] Salut tout le monde, voilà ça fait un baille que je cherche comment établir une liaison en local avec ma base de données. j'ai une interface faite ave je c pa utilisé ODBC [ par yedewei ] Salut le monde voila chuis pas vraiment un debutant en Cpp mais je sais pas appeler une base de données, que ce soit en odbc ou <span style="font-weig connexion à une base données dans un programme C via ODBC [ par boualiasma ] Salut,J'ai installé ODBC et j'ai l'attaché au ma base de données Mysql.1) Comment je vais tester dans mon programme C sous visual studio 2008 ma conne Accéder à une source de données ODBC [ par Alain ] Bonjour, j'aimerais savoir si il est possible et comment (exemples, site,...) accéder à une source de données ODBC comme en Java. Merci de votre aide, liaison ODBC MFC [ par julok2 ] Salut à tous,mon problème est le suivant:j'utilise ODBC pour faire la liaison entre mon programme et ma base de données, tout marche trés bien.Le seul


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 : 2,917 sec (4)

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