7 Sources de données ODBC
7.1 Pilotes ODBC
Sous Windows, un pilote ODBC (Open DataBase Connectivity) sert à masquer aux applications les particularités des bases de données. Ainsi une application Windows pourra utiliser l'interface standard des pilotes ODBC sans se preoccuper de la base de données qui est derriere. Celle-ci peut changer, l'application elle n'aura pas aêtre reecrite. Cette souplesse se paie par une moindre performance vis a vis des pilotes ecrits specialement pour la base de données.
Vous pouvez voir la liste des pilotes ODBC déjà installes sur votre machine par Demarrer/Parametres/Panneau de configuration. L'une des icones du Panneau de configuration est ODBC Data Sources. C'est l'outil de configuration des bases de données ODBC c'est a dire des bases ayant un pilote ODBC. Lorsqu'on ouvre cette application, on obtient un classeur a plusieurs pages dont celui des pilotes ODBC :
Ci-dessus, vous avez la liste des pilotes ODBC installes sur une machine Windows 9x.
Sous Windows, un pilote ODBC (Open DataBase Connectivity) sert à masquer aux applications les particularités des bases de données. Ainsi une application Windows pourra utiliser l'interface standard des pilotes ODBC sans se preoccuper de la base de données qui est derriere. Celle-ci peut changer, l'application elle n'aura pas aêtre reecrite. Cette souplesse se paie par une moindre performance vis a vis des pilotes ecrits specialement pour la base de données.
Vous pouvez voir la liste des pilotes ODBC déjà installes sur votre machine par Demarrer/Parametres/Panneau de configuration. L'une des icones du Panneau de configuration est ODBC Data Sources. C'est l'outil de configuration des bases de données ODBC c'est a dire des bases ayant un pilote ODBC. Lorsqu'on ouvre cette application, on obtient un classeur a plusieurs pages dont celui des pilotes ODBC :
Ci-dessus, vous avez la liste des pilotes ODBC installes sur une machine Windows 9x.
7.2 Sources de données ODBC
Une source de données ODBC est une source de données accessible via un pilote ODBC. Dans la terminologie Windows les noms de ces sources ODBC portent un nom appele DSN (Data Source Name). Il existe trois sortes de sources ODBC comme le montre l'écran ci-dessus :
User DSN
Une source de données ODBC "utilisateur" est donc une source réservée a un utilisateur particulier. Cette notion n'a de sens que sur une machine ayant plusieurs utilisateurs en général NT.
System DSN
Une source de données ODBC "utilisateur" est donc une source connue de tous les utilisateurs d'une machine. Là encore, cette notion a surtout un sens pour NT. File DSN
?
Sur une machine Windows 9x, on choisira User DSN ou System DSN. Il n'y aura une difference que s'il y a plusieurs utilisateurs declares sur la machine. L'interet d'une source de donees ODBC est que les applications windows y ont acces via le nom qu'on lui donne, independamment de son emplacement physique. Cela permet de deplacer physiquement les sources de données sans avoir a reecrire les applications.
User DSN
Une source de données ODBC "utilisateur" est donc une source réservée a un utilisateur particulier. Cette notion n'a de sens que sur une machine ayant plusieurs utilisateurs en général NT.
System DSN
Une source de données ODBC "utilisateur" est donc une source connue de tous les utilisateurs d'une machine. Là encore, cette notion a surtout un sens pour NT. File DSN
?
Sur une machine Windows 9x, on choisira User DSN ou System DSN. Il n'y aura une difference que s'il y a plusieurs utilisateurs declares sur la machine. L'interet d'une source de donees ODBC est que les applications windows y ont acces via le nom qu'on lui donne, independamment de son emplacement physique. Cela permet de deplacer physiquement les sources de données sans avoir a reecrire les applications.
7.3 Creer une sources de données ODBC
Montrons comment nous pouvons faire d'une base Access une source de données ODBC. Choisir la page User DSN :
Faire [Add] pour creer une nouvelle source ODBC.
Il vous faut choisir le pilote ODBC de la source que vous allez construire. Choisissez Microsoft Access driver puis cliquez sur [Terminer]. On obtient ensuite une page d'informations a remplir, page specifique au pilote choisi. Celle d'Access est la suivante :
Faire [Add] pour creer une nouvelle source ODBC.
Il vous faut choisir le pilote ODBC de la source que vous allez construire. Choisissez Microsoft Access driver puis cliquez sur [Terminer]. On obtient ensuite une page d'informations a remplir, page specifique au pilote choisi. Celle d'Access est la suivante :
3 1 2 1 nom de la source - n'est pas forcement le nom de la base ACCESS 2 texte libre de description de la source 3 bouton permettant d'aller designer la base Access qui On fait [OK] pour valider la source qui doit maintenant apparaitre avec les autres dans les sources ODBC "utilisateur". Ces sources peuventêtre supprimees avec le bouton [Remove] et reconfigurees avec le bouton [Configure]. Reconfigurons la source testODBC : et utilisons le bouton [Advanced].On voit ici qu'on pourrait définir un login/mot de passe pour notre source ODBC.
7.4 Utiliser une source de données ODBC
Pourquoi creer une source de données ODBC ? Beaucoup de langages de programmation sous Windows ont des fonctions d'acces aux sources de données ODBC : VB, Java, Php, Delphi,... Par ailleurs, des applications standard de Windows peuvent recuperer des données dans les sources ODBC. Prenons par exemple Excel. Lancez Excel et sur une classeur vide choisissez l'option données/données externes/Creer une Requête.
Un panneau "Choisir une source de données" apparait. On y retrouve toutes les sources ODBC. On peut mêmeen creer une nouvelle. Choisissons la source testODBC que nous venons de creer :
Un outil, Microsoft Query est alors lance. Il permet de faire des Requêtes sur des sources ODBC.
Nous retrouvons ci-dessus les trois tables de la base Access test.mdb. Quittons cette fenêtre avec le bouton [Fermer]. puis choisissons l'option Affichage/SQL de Microsoft Query :
Nous avons maintenant une zone dans laquelle nous pouvons saisir une Requête SQL sur la source ODBC :
Lancons l'execution de la Requête ci-dessus par [OK]. La Requête est executee et ses resultats affiches dans MS Query :
Nous pouvons maintenant "exporter" ces resultats vers Excel avec l'option Fichier/Renvoyer les données vers Microsoft Excel : Excel redevient la fenêtre active et demande quoi faire des données qu'il recoit :
Si nous acceptons la proposition ci-dessus, on obtient la feuille Excel suivante :
Un panneau "Choisir une source de données" apparait. On y retrouve toutes les sources ODBC. On peut mêmeen creer une nouvelle. Choisissons la source testODBC que nous venons de creer :
Un outil, Microsoft Query est alors lance. Il permet de faire des Requêtes sur des sources ODBC.
Nous retrouvons ci-dessus les trois tables de la base Access test.mdb. Quittons cette fenêtre avec le bouton [Fermer]. puis choisissons l'option Affichage/SQL de Microsoft Query :
Nous avons maintenant une zone dans laquelle nous pouvons saisir une Requête SQL sur la source ODBC :
Lancons l'execution de la Requête ci-dessus par [OK]. La Requête est executee et ses resultats affiches dans MS Query :
Nous pouvons maintenant "exporter" ces resultats vers Excel avec l'option Fichier/Renvoyer les données vers Microsoft Excel : Excel redevient la fenêtre active et demande quoi faire des données qu'il recoit :
Si nous acceptons la proposition ci-dessus, on obtient la feuille Excel suivante :
7.5 Microsoft Query
Quoique MS Query soit livré avec MS Office, il n'existe pas toujours de lien vers ce programme. On le trouve dans le dossier Office de MS Office sous le nom MSQRY32.EXE. Par exemple "C:\Program Files\Office 2000\Office\MSQRY32.EXE". MS Query permet d'interroger toute source de données ODBC avec des Requêtes SQL. Celles-ci peuventêtre construites graphiquement ou tapees directement au clavier. Comme la plupart des bases de données pour Windows fournissent des pilotes ODBC, elles peuvent donc toutesêtre interrogees avec MS Query. C'est souvent la solution la plus conviviale et elle a l'avantage d'etre identique pour toutes les bases. Lorsque MS Query est lance, on a l'affichage suivant :
Il nous faut tout d'abord designer la source de données ODBC qui vaêtre interrogee par Fichier/Nouvelle :
On voit ci-dessus qu'on a aussi la possibilite de creer une nouvelle source de données ODBC si celle-ci n'existait pas encore. Nous avons déjà suivi ce processus pour faire d'une base Access une source de données ODBC. Le processus de creation est ici identique. Choisissons de nouveau la source testODBC :
MS Query nous presente la structure de la source :
On est ramene a l'exemple precedent sur Access qu'on peut refaire ou modifier.
Il nous faut tout d'abord designer la source de données ODBC qui vaêtre interrogee par Fichier/Nouvelle :
On voit ci-dessus qu'on a aussi la possibilite de creer une nouvelle source de données ODBC si celle-ci n'existait pas encore. Nous avons déjà suivi ce processus pour faire d'une base Access une source de données ODBC. Le processus de creation est ici identique. Choisissons de nouveau la source testODBC :
MS Query nous presente la structure de la source :
On est ramene a l'exemple precedent sur Access qu'on peut refaire ou modifier.
7.6 Echanger des données entre SGBD compatibles ODBC
On peut echanger des données entre SGBD compatibles ODBC c.a.d. pour lesquels il existe un pilote ODBC. Il existe pour ce faire plusieurs methodes. Nous en montrons une. Comme exemple echangeons des données entre Access et MySQL. Nous travaillerons de nouveau avec la base test.mdb. Lancez le SGBD MySQL si besoin est. Cliquez droit sur la table t1 et choisissez l'option Exporter :
Une fenêtre demande vers quoi exporter la table t1. Dans type de fichier, choisissez le type "ODBC Bases", pour indiquer que vous allez l'exporter vers une source de données ODBC.
Ce choix fait, il vous est demande vers quelle table vous voulez exporter la table t1. Tapez table1 pour eviter une posible confusion avec la table t1 de la base Access:
Faites [OK].
Ici, il vous est demande de choisir la source de données ODBC ou sera exportee la table t1 d'Access sous le nom table1. Cette source n'existe pas encore.
Faites [New] pour la creer. Demarre alors un assistant de creation :
Indiquez que vous allez creer une source ODBC "utilisateur" et faites [Suivant]. Ensuite, on vous demande quel pilote ODBC voutre source va utiliser. Selectionnez le pilote MySQL :
Faites [Suivant]. Le dernier écran de l'assistant est un recapitulatif des choix faits :
Faites [Terminer]. Le pilote ODBC MySQL prend alors la main pour vous demander de configurer la source :
„« lui donner un nom. Celui-ci est libre
„« indiquer dans quelle base de données, la table Table1 doitêtre creee. Par defaut, le SGBD MySQL vient avec deux bases : test et mysql cette derniere etant réservée a l'administration des bases creees sous MySQL. Nous choisissons donc la base test. La ressemblance avec le nom de la base Access ou le nom de la source ODBC est ici purement fortuit.
„« indiquer sous quel compte (login/mot de passe) la table doit-elleêtre creee.
Faites [OK]. La source de données s'ajoute alors a la liste des sources ODBC déjà existantes : Faites [OK]. Access tente alors une connexion au SGBD MySQL avec les informations qu'on lui a données et represente mêmeune page de connexion a MySQL qui reprend les informations données lors de la configuration de la source de données ODBC :
On pourrait donc ici modifier certaines informations, notamment le login/mot de passe si celui-ci avait change depuis la configuration initiale. Faites simplement [OK]. Et la.... on a une erreur ODBC incomprehensible. Apres de multiples essais, il a fallu se rendre a l'evidence : sur la machine de test, la methode precedente ne fonctionnait pas. Nous l'avons cependant laissee car il se peut que sur votre machine personnelle, cela marche. Si ce n'est pas le cas, vous pouvez essayer la methode suivante. Lancez MS Query et connectez-vous a la source de données ODBC testMYSQL qui vient d'etre creee :
Faites [OK]. La fenêtre de connexion a la source MySQL s'affiche alors.
Faites [OK]. La liste des tables presentes dans la base test de la base mySQL s'affiche alors : Ici, la base etait vide. Ca peutêtre different pour vous. Faites [Fermer] puis prenez l'option Affichage/SQL pour emettre la Requête suivante :
Maintenant, revenez sous Accèss et sa base test :
Cliquez droit sur un endroi vide de la fenêtre précédente :
à
Choisir testMYSQL. Apparait alors la fenêtre de connexion au SGBD MySQL :
Faites [OK]. Si besoin est, modifiez auparavant le login/mot de passe. La connexion ODBC se fait et les tables de la base ODBC nous sont présentées :
Selectionnez table1 et faites [OK]. La liste des colonnes de table1 est ensuite affichée. Il s'agit de choisir parmi elles celle qui doit jouer le rôle de clé primaire.
Choisissez la colonne id et faites [OK]. La table table1 est alors intégrée a la base test en tant que table attachée : La table table1 ci-dessus n'est qu'une image ACCESS de la table table1 MySQL, seule celle-ci etant reelle. Lorsqu'on modifie l'une, l'autre est modifiee également. Nous allons utiliser cette propriété pour remplir table1 avec le contenu de t1 par un copier/coller entre les deux tables ACCESS ci-dessus. Tout d'abord, verifions la structure de la table attachee table1 : puis son contenu :
Elle est vide. Maintenant copions toutes les lignes de t1 pour les coller dans table1 :
et verifions que les données sont bien arrivees dans la table mySQL table1. Cela peu se faire de plusieurs façons. Avec MS Query, apres s'etre connectee a la base ODBC testMySQL, on emet la Requête suivante :
On obtient le resultat suivant :
Avec le client mysqlc on emet la même Requête :
Une fenêtre demande vers quoi exporter la table t1. Dans type de fichier, choisissez le type "ODBC Bases", pour indiquer que vous allez l'exporter vers une source de données ODBC.
Ce choix fait, il vous est demande vers quelle table vous voulez exporter la table t1. Tapez table1 pour eviter une posible confusion avec la table t1 de la base Access:
Faites [OK].
Ici, il vous est demande de choisir la source de données ODBC ou sera exportee la table t1 d'Access sous le nom table1. Cette source n'existe pas encore.
Faites [New] pour la creer. Demarre alors un assistant de creation :
Indiquez que vous allez creer une source ODBC "utilisateur" et faites [Suivant]. Ensuite, on vous demande quel pilote ODBC voutre source va utiliser. Selectionnez le pilote MySQL :
Faites [Suivant]. Le dernier écran de l'assistant est un recapitulatif des choix faits :
Faites [Terminer]. Le pilote ODBC MySQL prend alors la main pour vous demander de configurer la source :
„« lui donner un nom. Celui-ci est libre
„« indiquer dans quelle base de données, la table Table1 doitêtre creee. Par defaut, le SGBD MySQL vient avec deux bases : test et mysql cette derniere etant réservée a l'administration des bases creees sous MySQL. Nous choisissons donc la base test. La ressemblance avec le nom de la base Access ou le nom de la source ODBC est ici purement fortuit.
„« indiquer sous quel compte (login/mot de passe) la table doit-elleêtre creee.
Faites [OK]. La source de données s'ajoute alors a la liste des sources ODBC déjà existantes : Faites [OK]. Access tente alors une connexion au SGBD MySQL avec les informations qu'on lui a données et represente mêmeune page de connexion a MySQL qui reprend les informations données lors de la configuration de la source de données ODBC :
On pourrait donc ici modifier certaines informations, notamment le login/mot de passe si celui-ci avait change depuis la configuration initiale. Faites simplement [OK]. Et la.... on a une erreur ODBC incomprehensible. Apres de multiples essais, il a fallu se rendre a l'evidence : sur la machine de test, la methode precedente ne fonctionnait pas. Nous l'avons cependant laissee car il se peut que sur votre machine personnelle, cela marche. Si ce n'est pas le cas, vous pouvez essayer la methode suivante. Lancez MS Query et connectez-vous a la source de données ODBC testMYSQL qui vient d'etre creee :
Faites [OK]. La fenêtre de connexion a la source MySQL s'affiche alors.
Faites [OK]. La liste des tables presentes dans la base test de la base mySQL s'affiche alors : Ici, la base etait vide. Ca peutêtre different pour vous. Faites [Fermer] puis prenez l'option Affichage/SQL pour emettre la Requête suivante :
Avec un client MySQL, vous pouvez verifier la creation de la table : mySQL> use test; Database changed mySQL> show tables; +----------------+ | Tables in test | +----------------+ | table1 | +----------------+ 1 row in set (0.05 sec)
Cliquez droit sur un endroi vide de la fenêtre précédente :
à
Choisir testMYSQL. Apparait alors la fenêtre de connexion au SGBD MySQL :
Faites [OK]. Si besoin est, modifiez auparavant le login/mot de passe. La connexion ODBC se fait et les tables de la base ODBC nous sont présentées :
Selectionnez table1 et faites [OK]. La liste des colonnes de table1 est ensuite affichée. Il s'agit de choisir parmi elles celle qui doit jouer le rôle de clé primaire.
Choisissez la colonne id et faites [OK]. La table table1 est alors intégrée a la base test en tant que table attachée : La table table1 ci-dessus n'est qu'une image ACCESS de la table table1 MySQL, seule celle-ci etant reelle. Lorsqu'on modifie l'une, l'autre est modifiee également. Nous allons utiliser cette propriété pour remplir table1 avec le contenu de t1 par un copier/coller entre les deux tables ACCESS ci-dessus. Tout d'abord, verifions la structure de la table attachee table1 : puis son contenu :
Elle est vide. Maintenant copions toutes les lignes de t1 pour les coller dans table1 :
et verifions que les données sont bien arrivees dans la table mySQL table1. Cela peu se faire de plusieurs façons. Avec MS Query, apres s'etre connectee a la base ODBC testMySQL, on emet la Requête suivante :
On obtient le resultat suivant :
Avec le client mysqlc on emet la même Requête :
mySQL> use test Database changed mySQL> show tables; +----------------+ | Tables in test | +----------------+ | table1 | +----------------+ 1 row in set (0.02 sec) mySQL> select * from table1; +------+------+------+ | id | colA | colB | +------+------+------+ | id1 | a1 | 1 | | id2 | a2 | 2 | | id3 | a3 | 3 | | id4 | a4 | 4 | | id5 | a5 | 5 | +------+------+------+ 5 rows in set (0.05 sec) Nous avons donc pu "exporter" des données ACCESS vers une base MySQL.