在经典ASP中进行分页

时间:2011-12-09 02:39:47

标签: asp-classic

我的asp分页遇到了一些问题。它能够在每个页面上显示6条记录。但是,当我转到第二页时,它在每个不同的页面上显示相同的6条记录。 以下是我的代码。有什么建议吗?

 Dim iPageSize,iPageCount , iPageCurrent , strOrderBy,strSQL,iRecordsShown,I  
    iPageSize = 6
    set registerRS=server.CreateObject("ADODB.recordset")
    registerRS.PageSize = iPageSize
    ' Retrieve page to show or default to 1
    If Request.QueryString("page") = "" Then
        iPageCurrent = 1
    Else
        iPageCurrent = CInt(Request.QueryString("page"))
    End If
    qry="SELECT * FROM "dbo.CustomerOrders;"

    registerRS.CacheSize = iPageSize
    registerRS.open qry,ObjConn,3
    iPageCount = registerRS.PageCount
    If iPageCurrent > iPageCount Then iPageCurrent = iPageCount
    If iPageCurrent < 1 Then iPageCurrent = 1
    If iPageCount = 0 Then
        Response.Write "No records found!"
    Else
        registerRS.AbsolutePage = iPageCurrent
    end if
    %>
        <p>
        <font size="+1">Page <strong><%= iPageCurrent %></strong>
        of <strong><%= iPageCount %></strong></font>
        </p>
    <%
    x=registerRS.recordcount
    if registerRS.recordcount > 0 Then
    registerRS.movefirst
    End If
        Do While iRecordsShown < iPageSize And Not registerRS.EOF
                counter=counter+1
                if counter=41 then
                    counter=0
                    counter=counter+1
                end if
                r = r + 1
                If r = 1 then
                    Response.write "<tr>"
                End if
                %>
                   <td>
                        <%=registerRS.Fields("Address")%> <br />>                
                      </td>          
        <%       
            If r = 2 then
            Response.write "</tr>"
            End if
            If r = 3 then r = 1
            ' Increment the number of records we've shown
                iRecordsShown = iRecordsShown + 1
            registerRS.movenext
            loop            
        %>
</table>  
<table width=90%>
    <tr>
        <td>
<%        
    If iPageCurrent > 1 Then        
%>
    <a href="add.asp?page=<%= iPageCurrent - 1 %>&SchoolId=<%=registerRS.Fields("Add")%>">[&lt;&lt; Prev]</a>
<%
    End If
    ' You can also show page numbers:
        For I = 1 To iPageCount
        If I = iPageCurrent Then
%>
<%= I %>
<%Else%>
    <a href="add.asp?page=<%= I %>&SchoolId=<%=registerRS.Fields("Add")%>"><%= I %></a>     
<%
    End If
    Next 'I
    If iPageCurrent < iPageCount Then
%>
    <a href="add.asp?page=<%= iPageCurrent + 1 %>&SchoolId=<%=registerRS.Fields("Add")%>">[Next &gt;&gt;]</a>
<%
    registerRS.close
    set registerRS=nothing 
    End If
    end sub
%>

2 个答案:

答案 0 :(得分:2)

在网页上执行查看源并验证此行代码:

<a href="add.asp?page=<%= iPageCurrent + 1 %>&SchoolId=<%=registerRS.Fields("Add")%>">[Next &gt;&gt;]</a>

正在产生正确的结果。如果没有,那么您将需要回溯以找出未生成正确页面引用的位置。

将您的代码与此示例进行比较,以了解可能的错误来源。

http://www.asp101.com/samples/viewasp.asp?file=db_paging.asp

我做了一些测试,我看到了一些可能导致问题的事情。

1]您需要在Do-Loop之前初始化iRecordsShown = 0。

2]您还尝试在循环后将数据库值检索到链接中。这可能不会起作用,因为到那时循环已经到达记录的末尾。您需要在到达循环结束之前捕获数据库值。

否则它对我有用。

答案 1 :(得分:1)

如果记录数大于零(应该已经存在),则以下条件块将光标移动到第一个记录。然后循环从第一个记录开始,而不会影响页码。这是不明智的,删除该块。

if registerRS.recordcount > 0 Then
registerRS.movefirst
End If