Lorsque que le résultat d'une requête retourne beaucoup d'enregistrements, il peut être utile de l'afficher sur plusieurs pages. Cette source le fait pour des photos. Le détails des photos (chemin, width, height, titre, description, etc) est entreposé dans une table SQL.
Source / Exemple :
<!-- #include file="include/constantes.asp" -->
<html>
<head>
<title>Result</title>
</head>
<%
'---------------------------------------------------------------
'-------------------Déclaration des variables-------------------
'---------------------------------------------------------------
Dim I 'As Integer
Dim strHTLM 'As String
Dim strPage 'As String
Dim intNbrEnregis 'As Integer
Dim intPhotoAffiche 'As Integer
Dim intPhotoTotal 'As Integer
Dim boFinPhoto 'As Boolean
Dim intNbrPage 'As Integer
Dim intNbrCol 'As Integer
'---------------------------------------------------------------
'-----------Création de la connection et du recordset-----------
'---------------------------------------------------------------
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open DB_CONNECTION_STRING 'Définit dans le #Include File
set rs = server.CreateObject("ADODB.RECORDSET")
'---------------------------------------------------------------
'------------------Définition des Variables---------------------
'---------------------------------------------------------------
'Variables pour la pagination
intNbrEnregis = 25 'Nombre de photos par pages
intPhotoAffiche = 0 'Nombre de photos affichées sur la page en cours
intPhotoTotal = 0 'Nombre de photo au total
intNbrCol = 5 'Nombre de photos par rangée
strPage = TRIM(Request.QueryString("page")) 'la page que l'on veut afficher
IF strPage = "" THEN
strPage = 0
END IF
'Variables pour la requête
ReqSql = "SELECT * FROM Photo"
ReqSql = ReqSql & " Where Ce_que_vous_voulez"
ReqSql = ReqSql & " ORDER BY PhotoId" 'C'est important de définir un ordre immuable, surtout si vous utiliser SQL
'---------------------------------------------------------------
'-------------------Exécution de la requête---------------------
'---------------------------------------------------------------
Rs.Open ReqSql, Conn
Rs.MoveFirst
'---------------------------------------------------------------
'-------------------Affichage des résultats---------------------
'---------------------------------------------------------------
do While Not Rs.EOF
intPhotoTotal = intPhotoTotal + 1
Rs.MoveNext
Loop
Response.Write "Il y a " & intPhotoTotal & " photo(s)."
IF Rs.EOF AND Rs.BOF THEN
Response.Write "<FONT SIZE=+3 COLOR=""#357A95""><DIV ALIGN=""center"">Il n'y a de photos pour cette requête</DIV></FONT>"
ELSE
Rs.MoveFirst
Rs.Move (strPage * intNbrEnregis)
on error resume next
Do While Not Rs.EOF
For I = 1 to intNbrCol
intPhotoAffiche = intPhotoAffiche + 1
If I = 1 then 'prépare une nouvelle rangée
Response.Write "<tr>"
End If
strHTML = "<td><A HREF=""model.asp?Id=" & Rs.Fields("PhotoId") &""" alt="""" border=""0""></a></td>"
Response.Write (strHTML) 'En cliquant sur la photo, celle-ci s'agrandit selon les paramêtres recueillit dans la BD
If I = intNbrCol then 'Ferme la rangée
Response.Write "</tr>"
End If
Rs.MoveNext
If Rs.EOF then
If I <> intNbrCol then 'Ferme la rangée si le recordset est terminé mais que la rangé ne l'est pas
Response.Write "</tr>"
End If
Exit For 'Il n'y a plus de photos à afficher
End If
Next
If intPhotoAffiche = intNbrEnregis Then 'On arrête l'affichage
Exit Do
End If
Loop
END IF
%>
</table>
<br>
<font face="Arial, Helvetica, sans-serif" size="2">
<%If intPhotoTotal > intNbrEnregis Then 's'il y a plus de photos que permis sur une page
'définir le nombre de pages requises
If intPhotoTotal mod intNbrEnregis > 0 then
intNbrPage = 1
Else
intNbrPage = 0
End if
intNbrPage = IntNbrPage + (intPhotoTotal \ intNbrEnregis)
'définir le nom des pages (De quelle photos à quelle photos) ex: | 1-25 | 26-43 |
Response.Write "| "
For I = 0 to intNbrPage -1
If I <> IntNbrPage - 1 then
Response.Write "<a href=""Result_By_Page.asp?page="& I &""">" & 1 + (I * intNbrEnregis) & "-" & intNbrEnregis + (I * intNbrEnregis) & "</a>"
Else
Response.Write "<a href=""Result_By_Page.asp?page="& I &""">" & 1 + (I * intNbrEnregis) & "-" & (I * intNbrEnregis) + (intPhotoTotal - (I * intNbrEnregis)) & "</a>"
End If
Response.Write " | "
Next
End If%>
</font>
</body>
</html>
<%
Rs.Close
Conn.close
Set Rs = nothing
set Conn = nothing
%>
Conclusion :
1- DB_CONNECTION_STRING est définit dans un le #Include File. Voyez les codes sources sur ce site pour savoir comment faire.
2- Assurez vous de bien définir la clause ORDER BY sur un champ Identity si vous voulez que le résultat s'affiche toujours dans le même ordre.
3- Évitez de faire plusieurs Response.Write comme j'ai fait. Mettez-les plutôt dans une variable que vous imprimez à la toute fin de la procédure. Cela sauvera beaucoup de requête aux serveurs.
4- Visitez
http://www.lesetoiles.com sous la rubrique "Galerie de photos". Vous y trouverez un exemple fonctionel.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.