visual et odbc

Transcription

visual et odbc
STS IRIS
Jean-Claude CABIANCA
Accès à une base de données
sous Visual Studio C++
via ODBC (Open Database Connectivity)
I – INTRODUCTION
I.1 – Versions des logiciels
Microsoft Visual Studio 2008
Microsoft Access 2007
WAMP Server 2.2a
MYSQL 5.5.16
MYSQL Connector ODBC 5.1.9
I.2 – Installation des connecteurs ODBC
Lors de l'installation de Access le connecteur ODBC correspondant « Microsoft Acess Driver
(*.mdb, *.accdb) » est installé automatiquement.
Il faut installer manuellement le connecteur ODBC associé à MySql « MYSQL OBC 5.1
Driver ».
I.3 – Création des BDD
Il faut créer 2 bases de données, une sous MySql avec phpmyadmin de WampServer et une
sous Access.
I.4 – Inscription des bases de données
Avant de pouvoir utiliser une base de données via ODBC, il faut l'inscrire dans la base de
registres. Pour ce faire il faut cliquer sur le panneau de configuration, rechercher odbc et
sélectionner « Configurer les sources de données ODBC ». Une fois que la boîte s'affiche à
l'écran sélectionner l'onglet « Source de données utilisateur » et cliquer sur « Ajouter » pour
ajouter une source de données.
Une autre boîte s'affiche, et sélectionner le pilote ODBC « Microsoft Acess Driver (*.mdb) »
pour la base Access et « MYSQL OBC 5.1 Driver » pour la base MySql.
Il faut saisir le nom de votre source de données (BDD-ACCESS et BDD-MYSQL par exemple).
Ce nom sera utilisé pour identifier la base de données lors de la création de l'application par
l'intermédiaire Visual Studio.
Visual Studio C++ et ODBC
page 1/3
STS IRIS
Jean-Claude CABIANCA
II – PROGRAMMES
II.1 – Les classes MFC
ODBC fait appel aux cinq classes suivantes : Cdatabase, CRecordset, CrecordView,
CfieldExchange et CDBException.
Un objet de la classe CDatabase gère une connexion à une base de données à travers un pilote
ODBC. Ensuite, un objet CRecordset (associé à un objet CDatabase) va permettre la lecture/la
mise à jour de la base (représente le résultat d'une opération SQL SELECT).
Ces classes sont déclarées dans le fichier <afxdb.h>
II.2 – Principe de programmation
Pour utiliser CDatabase, il faut construire un objet CDatabase et appeler sa fonction membre
Open (ou OpenEx), cela ouvre une connexion.
Ensuite il faut construire les objets CRecordset pour l'exploitation de la source de données
connecté en passant au constructeur d'enregistrements un pointeur vers l'objet CDatabase.
Pour finir d'utiliser la connexion, il faut d'abord fermer tous les enregistrements utilisés
auparavant puis appeler la fonction membre Close et détruire l'objet CDatabase.
II.3 – Exemple de programmation
// BDD MySql
CDatabase mydb1;
// Connexion a la base MySql
Visual Studio C++ et ODBC
page 2/3
STS IRIS
Jean-Claude CABIANCA
CString ConnectStr1;
ConnectStr1+=_T("ODBC;");
ConnectStr1+=_T("DSN=BDD-MYSQL;"); //source de données BDD-MYSQL
ConnectStr1+=_T("Uid=test;Pwd=test;");
mydb1.Open(NULL,FALSE,FALSE,ConnectStr1);
CString query;
// Ecriture d'un renregistrement dans table1
query=_T("INSERT INTO table1 (var1, var2) VALUES (10,100)");
mydb1.ExecuteSQL(query);
// Lecture des enregistrements dans table1
CRecordset rs(&mydb1);
query=_T("Select * from table1");
rs.Open(CRecordset::forwardOnly,query);
while(!rs.IsEOF())
{
CString sValue1, sValue2;
rs.GetFieldValue((short)0,sValue1);
rs.GetFieldValue(1,sValue2);
m_edit = m_edit + ' ' + sValue1;
m_edit2= m_edit2 + ' ' + sValue2;
rs.MoveNext();
}
rs.Close();
// DeConnexion de la base MySql
mydb1.Close();
UpdateData( FALSE );
// BDD Access
CDatabase mydb2;
// Connexion a la base Access
CString ConnectStr2;
ConnectStr2+=_T("ODBC;");
ConnectStr2+=_T("DSN=BDD-ACCESS;"); //source de données BDD-ACCESS
ConnectStr2+=_T("Dbq=d:\\testaccess1.accdb;");
//ConnectStr2+=_T("Uid=test;Pwd=test;");
mydb2.Open(NULL,FALSE,FALSE,ConnectStr2);
CString query;
// Ecriture d'un renregistrement dans table1
query=_T("INSERT INTO table1 (champ1, champ2) VALUES (10,100)");
mydb2.ExecuteSQL(query);
// Lecture des enregistrements dans table1
CRecordset rs2(&mydb2);
query=_T("Select * from table1");
rs2.Open(CRecordset::forwardOnly,query);
while(!rs2.IsEOF())
{
CString sValue1, sValue2;
rs2.GetFieldValue((short)0,sValue1);
rs2.GetFieldValue(1,sValue2);
m_edit = m_edit + ' ' + sValue1;
m_edit2= m_edit2 + ' ' + sValue2;
rs2.MoveNext();
}
rs2.Close();
// DeConnexion de la base Access
mydb2.Close();
UpdateData( FALSE );
Visual Studio C++ et ODBC
page 3/3

Documents pareils