buongiorno,
uso questo codice per impaginare i risultati delle ricerche effettuate nel mio sito:
<%
Set objRecordset = Server.CreateObject("ADODB.Recordset")
' modificare il path per puntare correttamente al database
strConnection = "Provider=Microsoft.Jet.Oledb.4.0;data source=" & server.mappath("database.mdb")
' numero di record che vogliamo mostrare per pagina – utilizziamo una costante
CONST RECORDMAX = 10
' controlla se sia stato passato il parametro <page>, cioè il numero di pagina
If Request.QueryString("page").Count > 0 Then
intPageNum = CInt(Request.QueryString("page"))
Else
intPageNum = 1 'non è stato passato, di default iniziamo dalla prima pagina
End If
With objRecordset
' il seguente è il tipo di cursore più performante – non possiamo però utilizzare la proprietà RecordCount (poco importa, non ci serve in questa sede…)
.CursorType = adOpenForwardOnly
' la localizzazione del cursore di default è lato server, noi la spostiamo sul client
.CursorLocation = adUseClient
' il tipo di Lock più performante
.LockType = adLockReadOnly
' creiamo un buffer di memoria locale - dove verranno stipati i record - uguale a RECORDMAX
.CacheSize = RECORDMAX
.PageSize = RECORDMAX
.Source = "SELECT Immagine1, Vendita, Fitto, Regione, Provincia, Comune, TipologiaImmobile, Descrizione, MetriQuadri, Prezzo, ID, Agenzia FROM Immobili WHERE TipologiaImmobile = '"&tipologia&"' AND Vendita = "&vendita&" AND Fitto = "&fitto&" AND Provincia = '"&provincia&"' AND MetriQuadri >= "&estensioneMin&" AND MetriQuadri <= "&estensioneMax&" AND Prezzo >= "&valoreMin&" AND Prezzo <= "&valoreMax&" ORDER BY '"&ordinaper&"' "&ordinamento
.ActiveConnection = strConnection
.Open ' eseguiamo la Query
' questo è importante: disconnettiamo il Recordset dalla sorgente dati (cioè il database).
' Uno dei maggiori vantaggi è dato dalla scalabilità: per 100 utenti che "scorrono" le pagine,
' non ci saranno altrettante connessioni e cursori aperti sul server. Per 1000 utenti idem.
Set .ActiveConnection = Nothing
intTotalPages = .PageCount
If NOT .EOF then
' questo è importante: grazie al metodo GetRows dell'oggetto Recordset recuperiamo
' SOLTANTO il numero di record necessari per la pagina e li stipiamo in un array.
.AbsolutePage = intPageNum
arrData = .GetRows(RECORDMAX)
intColsTot = Ubound(arrData,1) ' numero di colonne, cioè di campi
intRowsTot = Ubound(arrData,2) ' numero di righe, cioè di records
End If
End With
' Rilasciamo le risorse
objRecordset.Close:Set objRecordset = Nothing
' Questo ciclo mostra il contenuto dei campi di ciascun record
' ovviamente va adattato e reso meno "spartano" (è qui solo per esempio)
For i = 0 To intRowsTot
Response.Write "
"
For j = 0 To intColsTot
Response.Write " "&arrData(j, i)
Next
Next
'Pagina precedente – mostra una freccia a sinistra
Response.Write "
"
If intPageNum > 1 Then
Response.Write( "<-- ")
End If
'Mostra la pagina corrente in BOLD (non cliccabile) + tutte le altre (cliccabili)
For i = 1 to intTotalPages
If i = intPageNum Then
Response.Write(" "&i&"")
Else
Response.Write(" "&i&"")
End If
Next
' Pagina successiva – mostra una freccia a destra
If intPageNum < intTotalPages Then
Response.Write( " -->")
End If
%>
Tutto funziona bene nella prima pagina, ma quando uso i link generati a fondo pagina ho questo errore:
Microsoft JET Database Engine error '80040e14'
Syntax error (missing operator) in query expression 'TipologiaImmobile = '' AND Vendita = False AND Fitto = False AND Provincia = '' AND MetriQuadri >= AND MetriQuadri <= AND Prezzo >= AND Prezzo <='.
I parametri di ricerca dei record diventano nulli...
Grazie
Luca

Rispondi quotando