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