| Adresse électronique: |
|
| Présence Internet: |
|
Il s'agit ici d'un article traduit de l'allemand par la rédaction de SELFHTML actuel. Veuillez poser vos questions relatives à cet article uniquement à son auteur, prenant compte que celui-ci ne maîtrise peut-être pas la langue française!
Celui qui commence à écrire dans des banques de données avec PERL serait bien avisé de tester dans un premier temps ses scripts en "laboratoire" avant de "mettre en rade" un serveur SQL avec des opérations sauvages. Pour tester un ordinateur local avec SQL, la banque de données d'exemple "comptoir.mdb" livrée avec MS-Access convient parfaitement. Dans cette banque de données d'exemple basée sur un modèle relationnel, il y a plusieurs tableaux et requêtes toutes faites en SQL. SQL signifie "Structured Query Language" et constitue pratiquement un standard international pour la communication avec des banques de données relationnelles. Cet article décrit la façon dont les relations SQL sur cette banque de données peuvent être exécutées par le navigateur.
Un tel environnement d'essai installé localement permet l'apprentissage de la problématique de "SQL en rapport avec PERL/CGI" et facilite ainsi les étapes suivantes, à savoir la liaison d'un serveur MS-SQL à l'Intranet.
L'auteur de cet article a trouvé l'introduction à ces questions de "PERL, ODBC et SQL" dans les
archives Perl. Markus Wolf y montre, à l'aide d'exemples choisis, des utilisations pratiques du module "Win32::ODBC".
Une introduction complète avec une documentation conséquente et des questions fréquemment posées concernant le module Win32::ODBC nous est bien sûr fournie par l'auteur Dave Roth lui-même:
page ODBC de Dave Roth. Sur ce site, Dave Roth nous propose entre autres une présentation sur ODBC - très bien rélisée avec PowerPoint, et qui peut également être téléchargée.
Le
didacticiel SQL propose d'avantage d'informations et des liens menant à d'autres pages sur le sujet à tous les utilisateurs intéressés.
La condition préalable pour suivre les étapes mentionnées dans cet article est l'installation d'un serveur Web local (OmniHttpd, Apache ou autre), ainsi que celle d'un interpréteur PERL pour un environnement Win32 et le logiciel de bases de données MS Access.
Comme bases de cet article ont servi:
Avant de pouvoir accéder à une source de données avec le module Win32::ODBC, celle-ci doit être créée en tant que source de données système.
ODBC: Open Data Base Connectivity - est un port spécial par lequel, à partir de différentes applications (par exemple Perl), il est possible d'accéder aux sources de données.
La source de données peut être créée soit dans le panneau de configuration ODBC soit par un script.
Pourquoi doit-il s'agir d'une source de données système? Le serveur Web, appelé aussi démon HTTP (httpd: « HyperText Transfer Protocol Daemon »), tourne comme service système. Un service système ne sait que faire d'une source de données utilisateur. Une relation SQL intégrée dans un script PERL/CGI échouerait dans un tel cas.
Pour installer une source de données dans le panneau de configuration, cliquez sur l'icône ODBC:

Il est ensuite important de choisir l'onglet du registre intitulé sources de données système:

... et cliquez sur le bouton "ajouter". Il apparaît une liste de choix des gestionnaires ODBC disponibles:

Choisissez le gestionnaire pour MS-Access puis continuez avec le choix de la banque de données...

Avec le choix de la banque de données MS-Access "comptoir.mdb", le programme d'installation ODBC est terminé et la source de données "comptoir" créée:

La source de données peut tout aussi bien être créée avec un script; le module "Win32::ODBC" propose également des méthodes pour y arriver. En premier lieu un script tout simple doit être présenté. Il établit la liste de tous les gestionnaires ODBC grâce à la méthode "Drivers()":
use Win32::ODBC;
%drivers = Win32::ODBC::Drivers();
foreach $driver (sort keys %drivers){
print "Driver = $driver\n";
}
|
Ce petit script donne donc une liste des gestionnaires ODBC disponibles et indique également leur orthographe exacte. Cette dernière est importante dans le script qui suit avec lequel la source de données est installée:
# créer une source de données ODBC
# lancer ce script comme CGI par le serveur WEB
# Si le serveur tourne comme service système, cela créera une source données système
use Win32::ODBC;
$DriverType = "gestionnaire Microsoft Access (*.mdb)";
$DSN = "comptoir";
$Description = "banque de données test";
$DataBase = "comptoir.mdb";
$dir="c:\\programme\\Microsoft Office\\Office\\samples";
if(Win32::ODBC::ConfigDSN(ODBC_ADD_DSN,
$DriverType,
("DSN=$DSN",
$Description,
"DBQ=$dir\\$DataBase",
"DEFAULTDIR=$dir",
"UID=", "PWD="))){
print "content-type:text/html\n\n";
print "configuration de la source de données: $DSN effectué avec succès!\n";
}
else{
print "content-type:text/html\n\n";
print "erreur lors de la création de la source de données $DSN\n";
Win32::ODBC::DumpError();
die;
}
|
Dave Roth l'auteur du module Win32::ODBC (voir aussi
page ODBC de Dave Roth) décrit dans sa présentation PowerPoint l'installation du module de la façon suivante:
Create the directory c:\perl\lib\auto\win32\odbc Copy ODBC.PLL into the new directory Copy ODBC.PM into c:\perl\lib\win32
Il existe différentes versions de ce module, la version actuelle étant "970208". Le fichier "ODBC.PLL" existe par ailleurs pour différentes versions Perl - veillez-y!
D'autre part l'installation du module Win32::ODBC est grandement facilitée avec le Perl Package Manager "PPM". Après que le fichier ZIP est téléchargé de
ActiveState/Packages/zips, celui-ci peut être décompressé dans un répertoire de votre choix avec un programme de décompression approprié (par exemple WinZip, PowerZip oder WinCommander). Dans ce répertoire se trouvent alors les fichiers et répertoire suivants:
[x86] (répertoire) Win32-ODBC.ppd (fichier) Readme (fichier)
Pour l'installation, lancer une "commande MS-DOS" dans ce répertoire en entrant la ligne de commande suivante:
ppm install Win32-ODBC.ppd
(Les paresseux copient cette commande à partir du fichier "Readme" et la collent dans la "commande MS-DOS"...).
Dans les sections qui suivent, différentes méthodes du module "Win32::ODBC" seront décrites; l'utilisateur peut les utiliser pour accéder aux données.
lignes typiques:
use Win32::ODBC; # incorporer le module
$db = new Win32::ODBC("DSN=comptoir"); # création d'un objet
|
Dans la mesure où un nom d'utilisateur et un mot de passe sont nécessaires pour accéder à la source de données, la syntaxe suivante peut être utilisée:
$db = new Win32::ODBC("DSN=XBASE;UID=Rolf;PWD=Rolf;")
|
La création de la connexion à la source de données peut aussi être incluse dans le traitement des erreurs. Pour celui-ci, la valeur retournée est évaluée comme suit:
if(!($db = new Win32::ODBC("DSN=XBASE;UID=Rolf;PWD=Rolf;"))){
print "erreur lors de la liaison avec $DSN\n";
print "erreur: ". Win32::ODBC::Error() ."\n";
exit;
}
|
remarque: la valeur retournée est "undef" quand l'erreur survient lors de la création d'objet.
SQL met à la disposition de l'utilisateur un vocabulaire étendu dont les termes lui permettent toutes les requêtes et manipulations possibles sur des banques de données:
SELECT titre, prenom, nom FROM personnel
WHERE anniversaire > #01/01/1960#INSERT INTO produits
VALUES (9999, 'haricots', 29, 5, 'sac', '10', 10000, 1, 10000, 0)DELETE FROM produits WHERE [Réf produit] = 9999DROP TABLE clientsEt on peut faire bien plus encore sur des banques de données relationnelles grâce à SQL. L'environnement-test présenté ici permet d'apprendre à connaître le "Structured Query Language" à l'aide de la banque de données d'exemple "comptoir".
L'exemple suivant donne une vue d'ensemble des tableaux de cette banque de données d'exemple et des différentes relations qui les unit:

Mentionnons encore l'exemple d'extraction (anglais Join) pour essayer d'être complet. Une extraction est une requête portant sur plusieurs tableaux:
SELECT produits.[nom du produit], fournisseurs.société
FROM produits, fournisseurs
WHERE produits.[N° fournisseur] = fournisseurs.[N° fournisseur] ORDER BY 2
Cette requête livre comme résultat tous les produits disponibles dans la colonne de gauche et leur fournisseur respectif dans la colonne de droite (le tri est effectué sur la colonne de droite).
Pour approfondir ses connaissances en SQL, il faut se reporter à la littérature spécialisée.
C'est au moyen de la méthode Sql() qu'une instruction SQL est exécutée sur la banque de données, syntaxe:
# $db est l'objet source de données créé plus haut
$sql_string = ("SELECT * FROM fournisseurs");
$db->Sql($sql_string);
|
Remarque: la valeur renvoyée par la méthode Sql() est "undef" si l'exécution de la commande SQL est couronnée de succés.
Après avoir utilisé la méthode Sql() d'autres méthodes peuvent être utilisées dans le script, comme par exemple:
FieldNames() # rechercher les titres de colonnes
FetchRow() # enregistrement suivant...
DataHash() # retourne l'enregistrement en tant que hash: ('nom de champ','valeur',...)
Error() # affichage de l'erreur
Close() # fermer la banque de données
qui sont elles aussi utilisées dans "comptoir.pl" . Une liste complète de toutes les méthodes disponibles dans Win32::ODBC peut être consultée sur les pages de Dave Roth.
Les deux sections qui suivent maintenant décrivent une page HTML avec le script correspondant. La page HTML comprend 3 requêtes prédéfinies sur "comptoir.mdb" ainsi qu'un champ de saisie de plusieurs lignes. Dans ce champ de saisie les commandes SQL peuvent être entrées et l'utilisateur peut voir le résultat de ses requêtes sur son navigateur. Outre les commandes SELECT d'autres instructions SQL peuvent également être testées comme la mise à jour d'enregistrements, la création d'états, la suppression de tableaux etc.
<HTML> <HEAD> <TITLE>SQL pour comptoir</TITLE> </HEAD> <BODY> <H2>SQL pour "comptoir.MDB" MS Access</H2> <FORM ACTION="/cgi-bin/comptoir.pl" METHOD="post"> <pre> montrer tous les produits: <INPUT TYPE="Radio" NAME="default" VALUE="produits"> montrer tous les clients: <INPUT TYPE="Radio" NAME="default" VALUE="clients"> montrer tous les fournisseurs:<INPUT TYPE="Radio" NAME="default" VALUE="fournisseurs"> </pre> entrer une commande SQL: <p> <TEXTAREA NAME="entree_sql" COLS="100" ROWS="12"></TEXTAREA> <p> Nombre de lignes maximum: <SELECT NAME="max_rows"> <OPTION VALUE="10">10 <OPTION VALUE="50">50 <OPTION VALUE="100">100 <OPTION VALUE="200">200 </SELECT> <INPUT TYPE="Submit"><INPUT TYPE="reset"> </FORM> </BODY> </HTML> |
#!perl
use CGI; # incorporer le module CGI
$cgi = new CGI;
use Win32::ODBC; # incorporer le module ODBC
$db = new Win32::ODBC("DSN=comptoir"); # créer l'objet
$max_rows = 2; # Nombre de lignes maximum qui seront sorties
$rows = 0;
# lire les paramètres
$max_rows = $cgi->param('max_rows');
$vordef = $cgi->param('default');
if($vordef){
$sql_string = ("select * from $vordef");
}
else{
$sql_string = $cgi->param('sql_entree');
}
if(! $db->Sql($sql_string)){
@nomschamps = $db->FieldNames(); # noms de champs
$colonnes = @nomschamps; # rechercher le nombre de colonnes
#sortie des données dans le navigateur (tableau)
print $cgi->header,
$cgi->start_html('résultat de la requête SQL'),
$cgi->h2('résultat de la requête SQL'),
$cgi->h5($sql_string),
"lignes affichées au maximum: ", $max_rows;
print "<table border cellspacing=0>\n";
# ne pas oublier les titres
print "<tr>\n";
for (@nomschamps){
print "<th>", $_, "</th>\n";
}
print "</tr>\n";
# et maintenant le reste du tableau
# FetchRow() donne 0, quand il n'y a plus de données
while ($db->FetchRow() and $rows < $max_rows){
print "<tr>\n";
undef %donnees ;
%donnees = $db->DataHash();
$rows++;
for ($i = 0; $i < $colonnes; $i++){
if ($donnees{$nomschamps[$i]} gt ''){
print "<td>", $donnees{$nomschamps[$i]}, "</td>\n";
}
else{
print "<td>pas mentionné</td>\n";
}
}
print "</tr>\n";
}
print "</table>\n",
$cgi->end_html;
$db->Close() ;
}
else{
print $cgi->header,
$cgi->start_html('erreur dans la commande SQL'),
$cgi->h2('erreur dans la commande SQL'),
$cgi->p,
$db->Error();
}
|
archives Perl de Markus Wolf
la page d'introduction à Perl, ODBC et SQL. À l'appui d'exemples l'auteur donne une introduction remarquable sur la façon d'accéder à Access de MS avec Perl et Win32::ODBC. [allemand]
didacticiel SQL
ce didacticiel représente une très bonne introduction dans le Structured Query Language et peut être téléchargé comme fichier PDF. [anglais]
introduction à SQL
cette page est un manuel en ligne pour ADABAS D à partir de la version Version 6.1. Étant donné que SQL est un standard international, ce manuel est du même coup une introduction parfaite à SQL. [allemand]
page ODBC de Dave Roth
Dave Roth, l'auteur du module Win32::ODBC donne avec ce site les réponses à toutes les questions concernant son module: comment on l'installe, quelles méthodes il contient etc. Un téléchargement de la présentation PowerPoint de "ODBC" est recommandé. [anglais]
SQL FAQ: How To' s
SQL FAQ, questions sur les extractions entre autres [anglais]
cours SQL interactif
Comme le titre le laisse entendre, un visiteur de ce site peut suivre un cours SQL interactif. on y trouve aussi des liens menant à d'autres pages. [anglais]
livre: PERL 5, Eric C. Herrmann, ISBN 0-7821-2200-0
ce que vous avez toujours voulu savoir sur PERL 5 - se trouve dans ce livre. Et bien sûr aussi un peu sur le module ODBC (avec des exemples). [anglais]
|
|