ASPcenter.net

18 febbraio 2010

Paginazione dei dati con ASP e MySQL

Archiviato in: ASP e database — Tag:, , , , — lukeonweb @ 11:06

In un precedente articolo abbiamo visto la tecnica per impostare la paginazione per query che restituiscono molti risultati in termini di mole di dati ed abbiamo analizzato il sistema per affidare all’oggetto Recordset l’intero compito gestire la paginazione, ma questo sistema, attraverso ASP, funziona solo con database di casa Microsoft come Access ed SQL Server, ma non col database oggetto di questo articolo: MySQL.

Si crei un database MySQL di esempio sul proprio server corredato dalla tabella “utenti” composta, a sua volta, dai campi “id” (Autoincrement) “nome” (Varchar) e “cognome” (Varchar) e la si popoli di dati di esempio attraverso una INSERT generata attraverso un file ASP, oppure utilizzando il software, o webware, che si è scelto per gestire MySQL ad interfaccia GUI.


Si crei adesso il file “report.asp”, lo si corredi del seguente codice e lo si esegua sul proprio server Web:

<%@LANGUAGE = VBScript%>
<%
    Dim pag
    pag = Request.QueryString("pag")
    If IsNumeric(pag) = False Or pag < 1 Then pag = 1
    Dim cn, rs
    Set cn = Server.CreateObject("ADODB.Connection")
    Set rs = Server.CreateObject("ADODB.Recordset")
    cn.Open ' STRINGA DI CONNESSIONE A MYSQL
%>
<html>
<head>
<title>Paginazione dei dati con ASP e MySQL</title>
</head>
<body>
<div align="center">
<%
    rs.Open "SELECT COUNT(id) AS temp FROM utenti", cn, 1
    Dim quanti, a, b
    quanti = CInt(rs("temp"))
    rs.Close
    If quanti > 0 Then
        Dim SQL
        SQL = "SELECT * FROM utenti ORDER BY id ASC"
        SQL = SQL & " LIMIT " & a & ", " & b
        b = 20
        a = (pag - 1) * b
        rs.Open SQL, cn, 1
%>
<table border="1">
<%
        While rs.EOF = False
%>
<tr>
<td><%=rs("id")%></td>
<td><%=rs("nome")%></td>
<td><%=rs("cognome")%></td>
</tr>
<%
            rs.MoveNext
        Wend
%>
</table><br>
<%
        Dim i, intero
        i = 1
        intero = CInt(quanti / b)
        If quanti > (intero * b) Then
            intero = intero + 1
        End If
%>
<b>Pagina <%=pag%> di <%=intero%></b><br><br>
<%
        For i = 1 To intero
            If CInt(i) = CInt(pag) Then
%>
[<b><%=i%></b>]
<%
            Else
%>
[<b><a href="report.asp?pag=<%=i%>"><%=i%></a></b>]
<%
            End If
        Next
        rs.Close
    End If
%>
</div>
</body>
</html>
<%
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
%>

Commentiamo insieme il codice.

Nell’intestazione della pagina, prima dell’apertura del codice HTML, recuperiamo la querystring “pag” che rappresenta il numero di pagina corrente; verifichiamo che sia numerica e non inferiore ad 1 e poi apriamo la connessione al database, avendo cura di inserire la propria stringa di connessione a MySQL al posto dell’omonimo commento evidenziato in grassetto.

Passiamo al corpo della pagina.

Dobbiamo innanzitutto contare quanti record sono presenti nella tabella di riferimento, sia per verificare che esistano dati nel database (possiamo anche usare la proprietà EOF dell’oggetto Recordset) che per impostare il numero di pagine da navigare.

Se ci sono record nel database dobbiamo effettuare un calcolo per assegnare dei valori alla clausola SQL LIMIT, valida per MySQL, il cui funzionamento teorico è semplice:

SELECT campo FROM tabella ORDER BY campo LIMIT inizio, fine

dove inizio e fine, nel nostro esempio, sono calcolati al volo e rappresentati dalle variabili “a” e “b”.

Stampiamo i dati a video e chiudiamo il codice HTML della struttura HTML che conterrà il report.

A questo punto tocca impostare i numeri di pagina utili a navigare le pagine, o che dir si voglia, a scorrere i record.

Questo sistema funziona esattamente come se venisse gestito col Recordset, come nell’esempio linkato ad inizio articolo, con l’unica differenza che il Recordset provvede da se a restituire un numero intero, arrotondato per eccesso, mentre in questo caso dobbiamo verificare noi, con un calcolo al volo, se il numero è intero o meno al fine di arrotondarlo per eccesso.

Stampiamo i numeri di pagine a video, chiudiamo il codice HTML e la connessione al database.

Nessun commento »

Non c'è ancora nessun commento.

RSS feed dei commenti a questo articolo. TrackBack URL

Lascia un commento

ASPcenter.net è il blog italiano su ASP, ASP.Net, VB.Net, C# e Visual Studio - Funziona con WordPress