Newsgroup: it.comp.www.asp
Titolo: errore durante l'impaginazione di record

Ottengo il segunte messaggio d'errore quando apro la pagina in explorer :
ADODB.Recordset error '800a0bcd'
Either BOF or EOF is True, or the current record has been deleted; the
operation requested by the application requires a current record.
/
artetecnica.it/prova.asp
, line 41
 Il mio obbiettivo è quello di recuperare dei record in base ad una scelta
fatta attraverso un drop-down menu (D1 nel codice) ed impaginarli.
Di seguito il codice della pagina.asp :
<%
Response.Expiresabsolute=now()
Response.buffer=true
%>
<html>
<head>
<title>New Page 1</title>
<meta name="Microsoft Border" content="tl, default">
</head>
<body>
<form method="get" action="prova.asp">
  <p><select name="D1" size="1">
    <option selected value="animali">animali</option>
    <option value="frutta">frutta</option>
  </select><input type="submit" value="Submit" name="B1"><input type="reset"
value="Reset"
  name="B2"></p>
</form>
<%
Select Case Request.QueryString("Direzione")
Case ""
Session("paginaCorrente") = 1
Case "Avanti"
Session("paginaCorrente")= Session("paginaCorrente") + 1
Case "Indietro"
Session("paginaCorrente")= Session("paginaCorrente") - 1
End Select
Const adOpenKeyset = 1
dim conn
dim rs
Set conn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
conn.open "magazino","",""
sql = "SELECT * FROM mag where famiglia like '" & request.querystring("d1")
& "'"
rs.Open sql, conn, adOpenKeyset
rs.PageSize = 1
rs.AbsolutePage =CLng(Session("PaginaCorrente"))
%>
<p>Questa è la pagina <%=Session("paginaCorrente")%> </p>
<p>di <%=rs.PageCount%></p>
<table border="0" width="100%" cellspacing="0" cellpadding="0">
<%
Dim i
For i = 1 To rs.PageSize
%>
  <tr>
    <td width="27%" bgcolor="#FF8040"><font face="arial"
size="2">LIBRI</font></td>
    <td width="73%" bgcolor="#FF8040"></td>
  </tr>
  <tr>
    <td width="27%"><font face="arial" size="2">FAMIGLIA:</font></td>
    <td width="73%"><font SIZE="2" FACE="Arial" COLOR="#000000"><%=
rs("famiglia")%></font></td>
  </tr>
  <tr>
    <td width="27%"><font face="arial" size="2">CODICE:</font></td>
    <td width="73%"><font SIZE="2" FACE="Arial" COLOR="#000000"><%=
rs("CODICE")%></font></td>
  </tr>
  <tr>
    <td width="27%"><font face="arial" size="2">DESCRIZIONE:</font></td>
    <td width="73%"><font SIZE="2" FACE="Arial" COLOR="#000000"><%=
rs.Fields("DESCRIZIONE")%></font></td>
  </tr>
  <tr>
    <td width="27%"><font face="arial" size="2">QUANTITA':</font></td>
    <td width="73%"><font SIZE="2" FACE="Arial" COLOR="#000000"><%=
rs("QUANTITA") %></font></td>
  </tr>
<%
rs.MoveNext
Next
%>
</table>
<% If CLng(Session("PaginaCorrente")) < rs.PageCount Then %>
<p><a href="prova.asp?Direzione=Avanti">Pagina successiva</a></p>
<p><%End If%> </p>
<p><% If CLng(Session("PaginaCorrente")) > 1 Then %> </p>
<p><a href="prova.asp?Direzione=Indietro">Pagina Precedente</a></p>
<p><%End If%>
</body>
</html>
Grazie a tutti.
Mario.

Succede perche' se hai deciso di fare 10 record per pagina e
nell'ultima pagina hai solo 5 record il sistema cerca ancora.
In rs.PageSize dichiari quante volte ripetere il ciclo, se calcoli
quanti record ti restano per l'ultima pagina il codice ASP ripete il
numero di volte corrette. 
Io ho risolto calcolando quanti record restano per l'ultima pagina e
dichiarando il valore di rs.pagesize  in questa maniera :
// code by Cricola - Cristian Fontana - 
cri...@gsnet.it
// numero di record per pagina
rs.pageSize = 10
rs.AbsolutePage = CLng(Session("Courrentpage"))
// Calcolo N° pagine e N° record ultima pagina
recordid=rs.recordcount
if rs.recordcount <> rs.pagesize * rs.pagecount then
quanti=rs.recordcount
pagine=rs.pagecount-1
pagtotali=rs.pagecount
    if CLng(Session("Courrentpage")) = rs.pagecount then
    rs.pagesize=quanti-(rs.pagesize*pagine)
    pagtotali=CLng(Session("Courrentpage"))
    end if
else
    pagtotali=rs.pagecount
end if
Spero ti possa essere utile
Ciao Cricola

Io ho risolto calcolando quanti record restano per l'ultima pagina e
Io, nel caso non trovi più record, forzo l'uscita dal for.  
For i = 1 To rs.PageSize 
	If rs.EOF Then
	     Exit For
	End If
	Response.write rs & "<br>"
	rs.MoveNext
Next
 
-- 
Rhodion
"The force that through the green fuse drives the flower
 Drives my green age; that blasts the roots of trees
 Is my destroyer."