Cours CPTIC 158
Bases de données sur Internet
16 et 17 avril 2002

Transformation de la page resultat.asp en page dynamique

Le travail est réparti en quatre parties, afin de décomposer le problème:

  1. Faire le minimum pour afficher le résultat de la recherche
  2. Traiter le cas où le résultat est vide
  3. Limiter le nombre d'enregistrement
  4. Afficher les résultats page par page, avec navigation entre les pages.

1. Faire le minimum pour afficher le résultat de la recherche

1.1 Insérer les lignes d'entête et supprimer le commentaire

--> la ligne <% option explicit %> doit être la première de la page ASP

<% option explicit %>
<!--#include virtual="/adovbs.inc"-->

1.2 Déclaration des variables

DIM ConnectStr
DIM Connexion
DIM RequeteSQL
DIM RS

1.3 Définir le chemin d'accès à la base, ainsi que la requête pour la recherche

ConnectStr="DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.Mappath("..\bd1.mdb")
Set Connexion = Server.CreateObject("ADODB.Connection")
Connexion.Open ConnectStr

RequeteSQL = "SELECT Reference, Texte FROM Citations WHERE (Valide=TRUE) AND (Texte LIKE '%" & Request("critere") & "%')"

1.4 Définir l'objet RecordSet

Set RS = Server.CreateObject("ADODB.Recordset")
RS.CursorLocation = adUseClient

1.5 Envoyer la requête à la base de donnée

RS.Open RequeteSQL,Connexion

1.6 Afficher le nombre de citation trouvée

<%= RS.RecordCount %>

1.7 Afficher le critère de recherche

<%= Request("critere") %>

1.8 Se déplacer vers le premier enregistrement

RS.MoveFirst

1.9 Début de la boucle sur les enregistrements trouvés

DO UNTIL RS.eof

1.10 Modifier l'affichage de la référence et de la citation

---> supprimer le commentaire HTML, mais pas son contenu
---> remplacer REFERENCE par <%= RS("Reference") %> et CITATION par <%= RS("Texte") %>

1.11 Passer à l'enrgistrement suivant

RS.MoveNext

1.12 Fin de la boucle

LOOP

1.13 Fermeture et suppression du RecordSet

RS.Close
Set RS = Nothing

2. Traiter le cas où le résultat est vide

2.1 Ajouter le test, ainsi que le texte à afficher au cas où

<% If RS.eof Then %>
<h2>aucune citation trouv&eacute;e</h2>
<p><b>vous avez cherch&eacute;</b>: "<%= Request("critere") %>"</p>
<p><a href="recherche.html">nouvelle recherche</a></p>
<% Else %>

2.2 Ajouter la fin de la portée du test (tout en bas de la page)

<% End If %>

3. Limiter le nombre d'enregistrement

A l'inverse du cas précédent, il se peut que la recherche effectuée par l'utilisateur aboutisse à un nombre très élevé de résultats, et il serait bon de limiter l'affichage, surtout ci celui-ci se fait à l'intérieur d'un tableau (ce qui n'est pas le cas ici...)

3.1 Déclaration des variables

DIM TaillePage
DIM i

3.2 Définition de la limitation de la taille

TaillePage = 20

3.3 Ajouter l'initialisation du compteur i et Modifier la condition de sortie de la boucle

i=0
DO UNTIL RS.eof OR i>=TaillePage

3.4 Ajouter l'incrémentation du compteur

i = i+1

4. Afficher les résultats page par page, avec navigation entre les pages.

La façon la plus simple de gérer une navigation page par page est de refaire la requête à chaque page. Ce n'est de loin pas la plus économique en temps de calcul sur le serveur.

Les paramètres à transmettre à la page resultat.asp, en plus du critère de recherche de l'utilisateur, sont le nombre d'enregistrement par page, ainsi que le numéro de la page courante.

4.1 Déclaration des variables

DIM PageCourante
DIM Ref
DIM NbPages

4.2 Récupérer les paramètres PageCourante et TaillePage

PageCourante=Request("PageCourante")
If PageCourante="" Then
  PageCourante=1
Else
  PageCourante = cint(PageCourante)
End If

TaillePage=request("TaillePage")
If TaillePage="" Then
  TaillePage=10
Else
  TaillePage = cint(TaillePage)
End If

--> supprimer la ligne ajoutée au point 3.2 (TaillePage = 20)

4.3 Modifier la taille de page du RecordSet

RS.CacheSize=TaillePage
RS.PageSize=TaillePage

4.4 Calculer le nombre de pages

NbPages = cint(RS.PageCount)

4.5 Modifier l'affichage du titre du résultat

---> supprimer le commentaire HTML, mais pas son contenu
---> remplacer X et Y par..., à vous de réfléchir, quelque chose du style:
<%= NomDeLaVariable %>

4.6 Se positionner sur la bonne page

RS.AbsolutePage = PageCourante

4.7 Calcul du lien pour la 1ère page de recherche

--> supprimer le commentaire HTML (mais pas son contenu...)

Le lien n'est actif que si on ne se trouve pas sur la page 1

Le lien est calculé ici en plusieurs instructions, afin de rendre le code lisible.

4.7.1

<% If PageCourante = 1 Then %>

4.7.2

<% Else
  Ref = Request.ServerVariables("SCRIPT_NAME")
  Ref = Ref & "?PageCourante=" & 1
  Ref = Ref & "&TaillePage=" & TaillePage
   Ref = Ref & "&Critere=" & Request("Critere")
%>

4.7.3

<%= Ref %>

4.7.4

<% End If %>

4.8 Calcul du lien pour la page précédente

--> supprimer le commentaire HTML (mais pas son contenu...)

Le contenu de cette cellule n'est affichée que si cela à un sens, d'ou le test If PageCourante > 1.

4.8.1

<% If PageCourante > 1 Then
  Ref = Request.ServerVariables("SCRIPT_NAME")
  Ref = Ref & "?PageCourante=" & (PageCourante -1)
  Ref = Ref & "&TaillePage=" & TaillePage
  Ref = Ref & "&Critere=" & Request("Critere")
%>

4.8.2

<%= Ref %>

4.8.3

<% End If %>

4.9 Calcul du lien pour la page suivante

Le calcul du lien sur la page suivante se fait de la même manière que pour le lien sur la page précédente, à deux modifications près:

A vous de remplacer les 4.9.x en vous servant des 4.8.x , en tenant compte des remarques ci-dessus.

4.10 Calcul du lien pour la dernière page

Le calcul du lien sur la dernière page se fait de la même manière que pour le lien sur la première page, à deux modifications près:

A vous de remplacer les 4.10.x en vous servant des 4.7.x , en tenant compte des remarques ci-dessus.