SELFHTML

Rolf Rost:
ODBC, PERL et SQL

Page d'infomation: vue d'ensemble

vers le bas  Rolf Rost
vers le bas  Introduction
vers le bas  Conditions système préalables
vers le bas  Installation de la source de données
vers le bas  Installation du module ODBC Win32
vers le bas  Premiers pas
vers le bas  Sources et bibliographie

Bas de la page 

Rolf Rost

Adresse électronique: Adresse électronique RolfRost@Yahoo.com
Présence Internet: Page en langue allemande http://www.i-netlab.de

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!

vers le hautvers le bas 

Introduction

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 Page en langue allemande 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 en langue anglaise 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 Page en langue anglaise didacticiel SQL propose d'avantage d'informations et des liens menant à d'autres pages sur le sujet à tous les utilisateurs intéressés.

vers le hautvers le bas 

Conditions système préalables

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:

vers le hautvers le bas 

Installation de la source de données

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.

Par le programme d'installation ODBC du panneau de configuration

Pour installer une source de données dans le panneau de configuration, cliquez sur l'icône ODBC:

icône ODBC

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

sources de données système

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

gestionnaires ODBC

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

relier à une source 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:

sources de données système terminées

Avec PERL

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;
}
 
vers le hautvers le bas 

Installation du module Win32::ODBC

Dave Roth l'auteur du module Win32::ODBC (voir aussi Page en langue anglaise 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 Page en langue anglaise 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"...).

vers le hautvers le bas 

Premiers pas

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.

création d'objet Win32::ODBC

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.

Commandes Sql

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:

Et 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:

relations dans comptoir

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.

Page HTML et script pour comptoir.MDB de MS-Access

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.

Code-source pour comptoir.htm

<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>

Le script comptoir.pl

#!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();
}
 
vers le hautvers le bas 

Sources et bibliographie

Page en langue allemande 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]

Page en langue anglaise 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]

Page en langue allemande 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 en langue anglaise 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]

Page en langue anglaise SQL FAQ: How To' s
SQL FAQ, questions sur les extractions entre autres [anglais]

Page en langue anglaise 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]

Page en langue anglaise 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]

vers le haut

© 2001-2005 Seite Informations