Paginazione (Parte I)

Chiunque abbia mai usato ASP per interrogare un database siè reso conto che quando si effettuano query di grandidimensioni (cioè che danno un output di moltirecords), si finisce inevitabilmente per visualizzare unalista lunghissima di records, con conseguente rallentamentodei tempi di caricamento e di perdita dellaleggibilità.
La soluzione c'è ! Con ASP si possono"paginare" i risultati (come fanno i motori diricerca) e dividerli in pagine da n records per volta, permezzo delle proprietà PageSize, PageCount edAbsolutePage dell'oggetto Recordset.
La PageSize indica quanti record devono essere contenuti inuna pagina, mentre la PageCount determina il numero totale dipagine e la AbsolutePage permette di accedere alla paginadesiderata.
Ma vediamo un esempio il file MOTOR.ASP:

<% response.expires=0 %>

La proprietà expires dell'oggetto Responseè impostata a zero per il motivo che il browser, ingenere, richiama una pagina, in precedenza caricata, dallaCACHE e non dal server, quindi si rischia di visualizzaresempre la stessa pagina, poiché la query inviata dalprogramma in asp non si aggiorna.
Insomma ècome quando una normale pagina web non viene caricata dalserver ma direttamente dalla cache, non riusciremo mai avedere se a quell'URL c'è un aggiornamentodella pagina, a meno di non svuotare la cache del browser,ecco perché usiamo response.expires=0 questo forza ilbrowser a richiamare il file .asp dal server.
Anche dal punto di vista delle risorse questo sistemaè più efficace della memorizzazione in RAMdegli oggetti, infatti è molto meglio rifare la querydi volta in volta
che conservere in memoria oggetti di grandi dimensioni, chemoltiplicati per il numero di utenti che li stanno usandopotrebbero mettere in crisi il server.

<HTML><HEAD><%tipo=request.form("select")if tipo="tutte" then tipo="%"

Qui la variabile tipo viene caricata del valore provenienteda un form in html, in cui c'è un tag <inputtype=".." name="select">

select case request.querystring("dir")case ""session("curpage")=1case "Next"session("curpage")=session("curpage")+1case "Prev"session("curpage")=session("curpage")-1end select

Con questa select analizziamo la variabile "dir"presa dalla querystring e ne leggiamo il contenuto,così da avere i seguenti casi:
se dir="Next" allora la variabile curpage siincrementa di un'unità, se dir="Prev"curpage si decrementa di un'unità, se invecedir="" allora curpage=1.

 

const adopenkeyset=3dim objconnectiondim rsif request.querystring("dir")="Next" or request.querystring("dir")="Prev" thensql=request.form("sq")elsesql="select * from ita where tipologia like '"&tipo&"' order by linea asc"end if

Questa è il controllo sul fatto che se siamogià oltre la prima schermata di paginazione, allora lastringa sql la deve prendere dagli input "hidden"(livedrete più in fondo), altrimenti la sql dimenticala variabile "tipo" , perchè alla secondaschermata (quando si schiaccia Prossima pagina), la variabile"tipo" chi la trasmette ? Ecco perchèbisogna trasportarsi tutta la stringa sql con gliinput type=hidden.

Set OBJdbConnection = Server.CreateObject("ADODB.Connection")OBJdbConnection.Open "corsetteria"set rs=server.createobject("ADODB.recordset")

Qui c'è la solita connessione al database"corsetteria" e la stringa sql che definisce laquery che vogliamo effettuare.

rs.pagesize=6rs.open sql,objdbconnection,adopenkeyset

Ecco che utilizziamo la proprietà pagesize, ossia conrs.pagesize=6 stiamo imponendo al motor.asp di visualizzarepagine da 6 records per volta, chiaramente potremmo impostareil valore che ci pare più appropriato alle nostreesigenze.

if not rs.eof then' se c'è almeno un record che soddisfa la query allora procedi con l'esecuzione dello script.rs.absolutepage=clng(session("curpage"))%>

Rs.AbsolutePage definisce la pagina che si sta visualizzando,assumendo il valore numerico dalla variabile"curpage".

<TITLE>Risultati della ricerca</TITLE></HEAD><body BGCOLOR="#000000" TEXT="#FFFFFF" LINK="#0000FF" ALINK="#FF0000" VLINK="#FF00FF"><p><div align="center"><table border="0" width="547"><center><tr valign="top"><td><center></center><font size="-1">Questi sono gli articoli che corrispondono meglio aicriteri che avete utilizzato per la ricerca. Per visionare ogni singoloprodotto in dettaglio, e per poterlo ordinare direttamente on line,e' sufficiente <b>cliccare sulla relativa immagine</b>.</font><p><p align="center">Page <%=session("curpage")%> of <%=rs.pagecount%> </p>

Prima di generare la tabella contenente i risultati mostriamoil numero di pagina (tramite la session("curpage"))e il numero totale di pagine da 6 records che si sonogenerate (tramite la rs.pagecount).

Continua >>>



Ti potrebbe interessare anche

commenta la notizia