<HTML> <HEAD> <TITLE>Un exemple de Base de Données</TITLE> </HEAD> <BODY> <H1>4. <A NAME="s4"></A>Un exemple de Base de Données</H1> <P> <A HREF="WWW-mSQL-HOWTO.html#toc4">Contenu de cette section</A></P> <P>Après avoir terminé la procédure d'installation, nous pouvons maintenant lancer l'application donnée en exemple. En fonction de la version de msql installée et de l'interface perl utilisée, nous devrons modifier un peu ce programme.</P> <P></P> <P>Tout d'abord, le fichier <CODE>index.html</CODE>, dans le répertoire <CODE>/home/httpd/html/</CODE> doit être modifié pour appeler l'application exemple. Nous pouvons mettre notre base (que nous pouvons appeler <CODE>database.cgi</CODE> ou <CODE>inventur.cgi</CODE>) dans <CODE>/home/httpd/html/test</CODE>.</P> <P></P> <P>Nous ajoutons une ligne parmi les suivantes dans <CODE>index.html</CODE> (à choisir, bien sûr, en fonction des choix d'installation) :</P> <P> <HR> <PRE> <LI>Test the <A HREF="test/database.cgi">Database, DBI:DBD-mSQL style!&lt;/A> <LI>Test the <A HREF="test/inventur.cgi">Database, MsqlPerl style!&lt;/A> </PRE> <HR> </P> <P>Vous ne devez en principe choisir qu'une seule des deux lignes précédentes, mais vous pouvez, si vous avez installé les deux types d'interface, laisser les deux lignes telles quelles. Vous pourrez alors comparer les performances.</P> <P></P> <H2>4.1 <A NAME="ss4.1"></A> Adaptation de l'exemple de script pour MsqlPerl</H2> <P>Il est nécessaire d'indiquer, dans notre exemple de script, qu'il faut utiliser l'interface MsqlPerl. La modification doit être faite à plusieurs endroits. D'abord, au début du fichier, il faut changer la clause <CODE>use</CODE> :</P> <P> <BLOCKQUOTE><CODE> <PRE> # use DBI; # Generisches Datebank-Interface use Msql; </PRE> </CODE></BLOCKQUOTE> </P> <P>Ensuite, à la ligne 27, MsqlPerl n'exige pas la mention d'un pilote particulier :</P> <P> <BLOCKQUOTE><CODE> <PRE> # $dbh = DBI->connect($host, $database, '', $driver) || $dbh = Msql->connect($host, $database) || </PRE> </CODE></BLOCKQUOTE> </P> <P>A partir de la ligne 33 et pour tout le script, changez toutes les occurrences de <CODE>do</CODE> par <CODE>query</CODE> :</P> <P> <BLOCKQUOTE><CODE> <PRE> # $dbh->do("SELECT * FROM hw") || db_init($dbh); $dbh->query("SELECT * FROM hw") || db_init($dbh); </PRE> </CODE></BLOCKQUOTE> </P> <P>Enfin, dans le laius MsqlPerl, la ligne 207 peut être mise en commentaire :</P> <P> <BLOCKQUOTE><CODE> <PRE> # $sth->execute || msg("SQL Error: $sth->errstr); </PRE> </CODE></BLOCKQUOTE> </P> <P>De plus, il peut être nécessaire de remplacer tout les appels <CODE>errstr</CODE> tels que celui de la ligne précédente par <CODE>errmsg</CODE>. Cela dépend de la version utilisée.</P> <P></P> <P>Après ces modifications, le script doit tourner correctement.</P> <P></P> <H2>4.2 <A NAME="ss4.2"></A> Adaptation de l'exemple pour msql-2</H2> <P>La syntaxe SQL a subi des changements durant le développement de msql-2. Le script original n'exécutera pas les instructions d'initialisation de la table, aux lignes 45 -- 48. Le modificateur <CODE>primary key</CODE> n'est plus compris par msql-2, et doit être supprimé :</P> <P> <BLOCKQUOTE><CODE> <PRE> $dbh->do(<<EOT) || die $dbh->errstr; # Neue Personen-Tabelle create table person ( # We do not need the 'primary key' modifier anymore in msql-2! # pn int primary key, # Personalnummer pn int, # Personalnummer name char(80), # Nachname, Vorname raum int # Raumnummer ) EOT $dbh->do(<<EOT) || die $dbh->errstr; # Neue Hardware-Tabelle create table hw ( # We do not need the 'primary key' modifier anymore in msql-2! # asset int primary key, # Inventurnummer asset int, # Inventurnummer name char(80), # Bezeichnung person int # Besitzer ) EOT </PRE> </CODE></BLOCKQUOTE> </P> <P></P> <P>Malheureusement, ce script particulier acceptera maintenant les enregistrements avec des numéros personnels identiques ; le modificateur msql-1 <CODE>primary key</CODE> était justement là pour éviter cela. La documentation msql2 indique comment utiliser la clause <CODE>CREATE INDEX</CODE> pour créer des entrées uniques.</P> <P></P> <HR> <P> Chapitre <A HREF="WWW-mSQL-HOWTO-5.html">suivant</A>, Chapitre <A HREF="WWW-mSQL-HOWTO-3.html">Précédent</A> <P> Table des matières de <A HREF="WWW-mSQL-HOWTO.html#toc4">ce chapitre</A>, <A HREF="WWW-mSQL-HOWTO.html#toc">Table des matières</A> générale</P> <P> <A HREF="WWW-mSQL-HOWTO.html">Début</A> du document, <A HREF="#0"> Début de ce chapitre</A></P> </BODY> </HTML>