15 messaggi dal 20 agosto 2011
Buona sera a tutti.
La paginazione nel forum del nostro sito, funziona ma quando passo dalla prima pagina ad una qualunque delle successive, il tempo d'attesa è insostenibile.

Ho provato a cercare nel form, eventuali situazioni analoghe alla mia ed eventuale soluzine ma nulla da fare. Nel caso abbiate la pazinza di indicarmi dove concentrare le mie ricerche.
Vi posto il codice, nel caso riusciate a capire qual'è il problema.

Vi ringrazio e saluto cordialmente.
Whupy
Modificato da whupy il 06 gennaio 2012 17.32 - <%
Response.Buffer = True
index="__INDEX__"
%><!--#include file="ltr.asp" --><%
Dim objFile
Set objFile = Server.CreateObject ("Scripting.FileSystemObject")
If objFile.FileExists (Server.MapPath("../public/manutenzione")) Then
manutenzione=True
Else
manutenzione=False
End If
Set objFile = Nothing
Set reo=New RegExp
With reo
.IgnoreCase=False
.Global=True
End With
reo.Pattern="^[0-9]{1,}$"
If IsNull(Request.QueryString("id")) Or Not reo.Test(Request.QueryString("id")) Then
Response.Redirect("index.asp")
Else
If Session("pmove") And Not IsNull(Request.QueryString("pmove")) And Not IsNull(Request.QueryString("pfrom")) And reo.Test(Request.QueryString("pmove")) And reo.Test(Request.QueryString("pfrom")) And Session("nickLivello")>=5 And Not manutenzione Then
move=Request.QueryString("pmove")
mfrom=Request.QueryString("pfrom")
mto=Request.QueryString("id")
If mfrom<>mto Then
Set conn=Server.CreateObject("ADODB.Connection")
conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & percorso & "mdb-database\data.mdb","","**************"
sql="UPDATE post SET idt=" & mto & " WHERE id=" & move & ";"
conn.Execute(sql)
conn.Close
Set conn=Nothing
End If
Session("pmove")=false
End If
Const ARTPP=20
%><!--#include file="function.asp" -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="it" lang="it">
<head>
<link rel="stylesheet" type="text/css" href="../style/style.css" />
<link rel="icon" type="image/ico" href="../images/favicon.ico" />
<title>Forum - Albinismo.eu</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
</head>
<body>
<center>
<table border="0" width="90%">
<tr>
<td>
<table border="0" width="100%">
<tr>
<td align="left">
<!--#include file="logo.asp" -->
</td>
<td>&nbsp;</td>
<td align="right">&nbsp;</td>
</tr>
</table>
</td>
</tr>
<tr>
<td><hr size="4" style="color: #26619B" /></td>
</tr>
<tr>
<td align="center" valign="top">
<!--#include file="barralink.asp" -->
</td>
</tr>
<tr>
<td align="center" valign="top">
<hr size="1" style="color: #26619B" />
</td>
</tr>
<%
percorso=server.MapPath(".")
reo.Pattern="forum"
percorso=reo.Replace(percorso, "")
Set reo=Nothing
Set conn=Server.CreateObject("ADODB.Connection")
conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & percorso & "mdb-database\data.mdb","","*********"
Set rsup=Server.CreateObject("ADODB.Recordset")
Set rs=Server.CreateObject("ADODB.Recordset")
sql="SELECT forum.id, forum.forum, topic " &_
"FROM (forum INNER JOIN topic ON forum.id=topic.idf) " &_
"WHERE topic.id=" & Request.QueryString("id") & ";"
rs.Open sql,conn,3,3
If (rs.RecordCount<>0) Then
rs.MoveFirst
id=rs.Fields("id")
forum=rs.Fields("forum")
topic=rs.Fields("topic")
Else
id=""
forum=""
topic=""
End If
rs.Close
pag=0
totart=0
totpag=0
sql="SELECT COUNT(*) AS tot " &_
"FROM post " &_
"WHERE post.idt=" & Request.QueryString("id") & ";"
rs.Open sql,conn,3,3
If (rs.RecordCount<>0) Then
rs.MoveFirst
totart=rs.Fields("tot")
End If
rs.Close
totpag=-Int(-totart/ARTPP)
If Not isNumeric(Request.QueryString("pag")) Then
pag=1
ElseIf ((Int(Request.QueryString("pag")) > 0) And (Int(Request.QueryString("pag")) <= totpag)) Then
pag=Int(Request.QueryString("pag"))
Else
pag=1
End If
topc=pag*ARTPP
esclusi=(pag-1)*ARTPP
%> <tr>
<td>
<table border="0" width="100%">
<tr>
<td align="left"><font class="bodysmall">&nbsp;&nbsp;&nbsp;<a href="index.asp" class="bodylinksmall">Indice</a>&nbsp;&raquo;&nbsp;<a href="topic.asp?id=<%=id%>" class="bodylinksmall"><%=forum%></a>&nbsp;&raquo;&nbsp;<a href="post.asp?id=<%=Request.QueryString("id")%>" class="bodylinksmall"><%=topic%></a></font></td>
</tr>
<%
If (totpag > 1) Then
pagprev=pag-1
pagnext=pag+1
%> <tr>
<td align="left" valign="top">
<%
If pagprev>0 Then
%> <a class="bodylinksmall" href="post.asp?id=<%=Request.QueryString("id")%>&amp;pag=<%=pagprev%>">&laquo;Indietro</a>&nbsp;
<%
End If
For i = 1 To totpag
If pag = i Then
%> <font class="bodysmall"><%=i%></font>&nbsp;
<%
Else
%> <a class="bodylinksmall" href="post.asp?id=<%=Request.QueryString("id")%>&amp;pag=<%=i%>"><%=i%></a>&nbsp;
<%
End If
Next
If pagnext<=totpag Then
%> <a class="bodylinksmall" href="post.asp?id=<%=Request.QueryString("id")%>&amp;pag=<%=pagnext%>">Avanti&raquo;</a>&nbsp;
<%
End If
%> </td>
</tr>
<%
Else
%> <tr>
<td align="left">
<font class="bodybig">&nbsp;</font>
</td>
</tr>
<%
End If
If Session("anenpncicccptucmsvedldthcg")="lumiaooniairefeskariuaiphp" Then
%> <tr>
<td align="left"><a href="newpost.asp?<%=query_string%>" class="bodylinknormal">Rispondi</a></td>
</tr>
<%
Else
%> <tr>
<td align="left"><a href="../<%=Session("language")%>/login.asp?p=t&amp;<%=query_string%>" class="bodylinknormal">Rispondi</a></td>
</tr>
<%
End If
%> </table>
</td>
</tr>
<tr>
<td>
<table border="0" width="100%">
<tr valign="top">
<td valign="top">
<table border="0" width="100%" summary="Forum di discussione sull'albinismo">
<tr>
<td align="center" bgcolor="#26619B" valign="top" width="20%"><font class="headersmall">Autore</font></td>
<td align="center" bgcolor="#26619B" valign="top" width="80%"><font class="headersmall"><%=topic%></font></td>
</tr>
<%
If esclusi <> 0 Then
sql="SELECT TOP " & ARTPP & " post.id, post.ora, utenti.id AS uid, utenti.nick, utenti.foto, " &_
"utenti.livello AS livello, COUNT(postcopy.post) AS totposts " &_
"FROM (post AS postcopy INNER JOIN (post INNER JOIN utenti ON post.ida=utenti.id) ON postcopy.ida=utenti.id) " &_
"WHERE post.idt=" & Request.QueryString("id") & " AND post.id NOT IN " &_
"(SELECT TOP " & esclusi & " post.id " &_
"FROM (post AS postcopy INNER JOIN (post INNER JOIN utenti ON post.ida=utenti.id) ON postcopy.ida=utenti.id) " &_
"WHERE post.idt=" & Request.QueryString("id") & " " &_
"GROUP BY post.id, post.ora, utenti.id, utenti.nick, utenti.foto, utenti.livello, postcopy.ida " &_
"ORDER BY post.ora) " &_
"GROUP BY post.id, post.ora, utenti.id, utenti.nick, utenti.foto, utenti.livello, postcopy.ida " &_
"ORDER BY post.ora;"
Else
sql="SELECT TOP " & ARTPP & " post.id, post.ora, utenti.id AS uid, utenti.nick, utenti.foto, " &_
"utenti.livello AS livello, COUNT(postcopy.post) AS totposts " &_
"FROM (post AS postcopy INNER JOIN (post INNER JOIN utenti ON post.ida=utenti.id) ON postcopy.ida=utenti.id) " &_
"WHERE post.idt=" & Request.QueryString("id") & " " &_
"GROUP BY post.id, post.ora, utenti.id, utenti.nick, utenti.foto, utenti.livello, postcopy.ida " &_
"ORDER BY post.ora;"
End If
rs.Open sql,conn,3,3
If (rs.RecordCount<>0) Then
rs.MoveFirst
Do Until rs.EOF
id=rs.Fields("id")
ora=rs.Fields("ora")
nick=rs.Fields("nick")
uid=rs.Fields("uid")
livello=rs.Fields("livello")
If rs.Fields("totposts")=1 Then
nummess=rs.Fields("totposts") & " messaggio"
Else
nummess=rs.Fields("totposts") & " messaggi"
End If
If IsNull(rs.Fields("foto")) Or rs.Fields("foto")="" Then
foto="../images/fotoutente.jpg"
Else
foto="../public/utenti/" & rs.Fields("foto")
End if
If livello=10 Then
tipo="Amministratore"
ElseIf livello>=5 Then
tipo="Moderatore"
ElseIf livello>=1 Then
tipo="Utente"
End If
sql="SELECT post " &_
"FROM post " &_
"WHERE id=" & id & ";"
rsup.Open sql,conn,3,3
If (rsup.RecordCount=1) Then
rsup.MoveFirst
post=decodeText(clearText(rsup.Fields("post")))
Else
post=""
End If
rsup.Close
%> <tr>
<td valign="top" width="20%" bgcolor="#EEEEEE">
<table>
<tr>
<td align="left" valign="top"><a href="../<%=Session("language")%>/profilo.asp?id=<%=uid%>"><img src="<%=foto%>" alt="<%=nick%>" border="1" width="80" /></a></td>
<td align="left" valign="top">
<%
If Session("anenpncicccptucmsvedldthcg")="lumiaooniairefeskariuaiphp" Then
linkUtente=" href=""../" & Session("language") & "/profilo.asp?id=" & uid & """"
Else
linkUtente=""
End If
%> <font class="menusmall"><b><a name="post<%=id%>"<%=linkUtente%> class="menulinksmall"><%=nick%></a></b><br /><%=tipo%><br /><br /><%=nummess%></font>
</td>
</tr>
</table>
</td>
<td valign="top" align="left" width="80%">
<table width="100%">
<tr>
<td align="left" valign="top">
<font class="bodynormal"><%=post%></font>
</td>
</tr>
<%
If firma<>"" Then
%> <tr>
<td align="left" valign="top">
<hr /><font class="bodynormal"><%=firma%></font>
</td>
</tr>
<%
End If
%> </table>
</td>
</tr>
<tr>
<td valign="top" width="20%" bgcolor="#EEEEEE">
<font class="menusmall">Inviato il <%=ora%></font>
</td>
<td align="left" valign="top" bgcolor="#EEEEEE">
<%
If Session("anenpncicccptucmsvedldthcg")="lumiaooniairefeskariuaiphp" And (Session("nickID")=uid Or Session("nickLivello")>=5) And Not manutenzione Then
modifica="&nbsp;&middot;&nbsp;<a href=""modpost.asp?id=" & id & "&amp;tid=" & Request.QueryString("id") & """ class=""menulinksmall"">Modifica</a>"
Else
modifica=""
End If
If Session("anenpncicccptucmsvedldthcg")="lumiaooniairefeskariuaiphp" And Session("nickLivello")>=5 And Not manutenzione Then
rimuovi="&nbsp;&middot;&nbsp;<a href=""delpost.asp?id=" & id & "&amp;tid=" & Request.QueryString("id") & """ class=""menulinksmall"">Rimuovi</a>"
sposta="&nbsp;&middot;&nbsp;<a href=""index.asp?pmove=" & id & "&amp;pfrom=" & Request.QueryString("id") & """ class=""menulinksmall"">Sposta</a>"
Else
rimuovi=""
sposta=""
End If
If Session("anenpncicccptucmsvedldthcg")="lumiaooniairefeskariuaiphp" Then
%> <a href="newpost.asp?q=<%=id%>&amp;<%=query_string%>" class="menulinksmall">Quota</a><%=modifica%><%=rimuovi%><%=sposta%>
<%
Else
%> <a href="../<%=Session("language")%>/login.asp?p=t&amp;q=<%=id%>&amp;<%=query_string%>" class="menulinksmall">Quota</a>
<%
End If
%>
</td>
</tr>
<tr>
<td colspan="2"><hr size="1" style="color: #26619B" /></td>
</tr>
<%
rs.MoveNext
Loop
Else
%> <tr>
<td align="center" valign="top" width="100%">
<font class="bodynormal">Nessun Post</font>
</td>
</tr>
<tr>
<td><hr size="1" style="color: #26619B" /></td>
</tr>
<%
End If
rs.Close
conn.Close
Set rs=Nothing
Set rsup=Nothing
Set conn=Nothing
%> </table>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<table border="0" width="100%">
<%
If Session("anenpncicccptucmsvedldthcg")="lumiaooniairefeskariuaiphp" Then
%> <tr>
<td align="left"><a href="newpost.asp?<%=query_string%>" class="bodylinknormal">Rispondi</a></td>
</tr>
<%
Else
%> <tr>
<td align="left"><a href="../<%=Session("language")%>/login.asp?p=t&amp;<%=query_string%>" class="bodylinknormal">Rispondi</a></td>
</tr>
<%
End If
If (totpag > 1) Then
pagprev=pag-1
pagnext=pag+1
%> <tr>
<td align="left" valign="top">
<%
If pagprev>0 Then
%> <a class="bodylinksmall" href="post.asp?id=<%=Request.QueryString("id")%>&amp;pag=<%=pagprev%>">&laquo;Indietro</a>&nbsp;
<%
End If
For i = 1 To totpag
If pag = i Then
%> <font class="bodysmall"><%=i%></font>&nbsp;
<%
Else
%> <a class="bodylinksmall" href="post.asp?id=<%=Request.QueryString("id")%>&amp;pag=<%=i%>"><%=i%></a>&nbsp;
<%
End If
Next
If pagnext<=totpag Then
%> <a class="bodylinksmall" href="post.asp?id=<%=Request.QueryString("id")%>&amp;pag=<%=pagnext%>">Avanti&raquo;</a>&nbsp;
<%
End If
%> </td>
</tr>
<%
End If
%> <tr>
<td align="center" valign="top">
<hr size="1" style="color: #26619B" />
</td>
</tr>
</table>
<!--#include file="v.asp" -->
</td>
</tr>
</table>
</center>
</body>
</html>
<%
End If
%>
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao, bentornata :)
Sembra che venga eseguita una query diversa, più complessa, quando visiti le pagine successive alla prima. Questo spiega perché la prima pagina si carica velocemente mentre le altre no.

Il problema "inizia" all'altezza di questa linea che discrimina le pagine successive alla prima.
If esclusi <> 0 Then
Guardando il codice che viene di seguito penso che possa essere semplificato per darti una paginazione più veloce, tuttavia è un po' intricato e potrei fare qualche errore. Comunque proviamo, ma fai una copia di backup del tuo file prima.

Lo scopo è sfruttare le proprietà .PageSize e .AbsolutePage del recordset, pensate proprio per ottenere una paginazione dei risultati.
Qui trovi un articolo di Daniele Bochicchio che ne parla:
http://www.aspitalia.com/script/208/Utilizzare-Paginazione-Motori-Ricerca.aspx

Arrivando al dunque... dovresti sostituire questo pezzo:
If esclusi <> 0 Then
sql="SELECT TOP " & ARTPP & " post.id, post.ora, utenti.id AS uid, utenti.nick, utenti.foto, " &_
"utenti.livello AS livello, COUNT(postcopy.post) AS totposts " &_
"FROM (post AS postcopy INNER JOIN (post INNER JOIN utenti ON post.ida=utenti.id) ON postcopy.ida=utenti.id) " &_
"WHERE post.idt=" & Request.QueryString("id") & " AND post.id NOT IN " &_
"(SELECT TOP " & esclusi & " post.id " &_
"FROM (post AS postcopy INNER JOIN (post INNER JOIN utenti ON post.ida=utenti.id) ON postcopy.ida=utenti.id) " &_
"WHERE post.idt=" & Request.QueryString("id") & " " &_
"GROUP BY post.id, post.ora, utenti.id, utenti.nick, utenti.foto, utenti.livello, postcopy.ida " &_
"ORDER BY post.ora) " &_
"GROUP BY post.id, post.ora, utenti.id, utenti.nick, utenti.foto, utenti.livello, postcopy.ida " &_
"ORDER BY post.ora;"
Else
sql="SELECT TOP " & ARTPP & " post.id, post.ora, utenti.id AS uid, utenti.nick, utenti.foto, " &_
"utenti.livello AS livello, COUNT(postcopy.post) AS totposts " &_
"FROM (post AS postcopy INNER JOIN (post INNER JOIN utenti ON post.ida=utenti.id) ON postcopy.ida=utenti.id) " &_
"WHERE post.idt=" & Request.QueryString("id") & " " &_
"GROUP BY post.id, post.ora, utenti.id, utenti.nick, utenti.foto, utenti.livello, postcopy.ida " &_
"ORDER BY post.ora;"
End If
rs.Open sql,conn,3,3
If (rs.RecordCount<>0) Then
rs.MoveFirst


Con questo pezzo:
sql="SELECT TOP " & topc & " post.id, post.ora, utenti.id AS uid, utenti.nick, utenti.foto, " &_
"utenti.livello AS livello, COUNT(postcopy.post) AS totposts " &_
"FROM (post AS postcopy INNER JOIN (post INNER JOIN utenti ON post.ida=utenti.id) ON postcopy.ida=utenti.id) " &_
"WHERE post.idt=" & Request.QueryString("id") & " " &_
"GROUP BY post.id, post.ora, utenti.id, utenti.nick, utenti.foto, utenti.livello, postcopy.ida " &_
"ORDER BY post.ora;"

rs.Open sql,conn,3,3
rs.PageSize = ARTPP
rs.AbsolutePage = pag
If (rs.RecordCount>esclusi) Then
'rs.MoveFirst <-- questa puoi eliminarla


ciao

Enjoy learning and just keep making
15 messaggi dal 20 agosto 2011
Piacere di "rileggerti".
Faccio tesoro dei suggerimenti che mi dai. Vado a studiare anche l'articolo di Bochicchio che mi suggerisci.
Ci metterò un po' ma ti faccio sicuramente sapere se risolvo.
Un caro saluto.
Whupy

P.S. non sono mai andata via, ho letto un bel po' dei vostri articoli ed ho fatto importanti modiche ed integrazioni al sito. In dettaglio ho inserito un Guestbook che, causa mia inesperienza, attualmente è sotto attacco di spammer ;), quindi sto provvedendo all'inserimento di un captche...
Il Webmaster del sito è in partenza per il Giappone, quindi dovremo cavarcela da soli, o meglio, con il vostro aiuto ;).

Un "in bocca" al lupo a tutti (staff e lettori) per l'anno appena iniziato.
15 messaggi dal 20 agosto 2011
Grande Moreno!
dopo + di un mese dalla tua risposta, ho trovato il tempo (dettato dalla disperazione per i tempi d'attesa nel forum :) ), di attuare la tua soluzione e... FUNZIONA ALLA GRANDE.
Noi dello staff, (attualmente presi dalla preparazione di un nuovo evento che si terrà in Luglio e poco presenti nella manutenzione del sito :) ) ti ringraziamo di cuore.
Ora, per gratitudine non mi rimane altro che, studiare e capire cosa hai fatto! Tengo anche l'articolo che mi hai suggerito, tra i preferiti in modo che appena avrò tempo, lo leggerò con attenzione.
Un abbraccio da noi tutti.
Whupy
11.886 messaggi dal 09 febbraio 2002
Contributi
whupy ha scritto:

Un abbraccio da noi tutti.
che cari, grazie a voi :) Mi fa piacere esservi stato d'aiuto.
In bocca al lupo per il prossimo evento

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.