如何控制分页显示记录集

你可以将下面的代码作为标准代码使用,今后凡是遇到分页显示的问题,只要稍微修改一下代码即可完全套用。

page.asp

<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type"CONTENT="text/html;CHARSET=GB2312">
<TITLE>Untitled</TITLE>
</HEAD>
<BODY>

<%
Dim CONN_STRING

' 如果使用DSN指定数据源用下面的语句;
'CONN_STRING = "DSN=DSNName;"

' 使用DSN-LESS方法指定数据源;
CONN_STRING = Server.MapPath("database.mdb")
CONN_STRING = "driver={Microsoft Access Driver (*.mdb)};dbq=" & CONN_STRING

Dim iPageSize '每页显示的记录数;
Dim iPageCount '页面总数
Dim iPageCurrent '显示的当前页面
Dim strOrderBy '按什么排序
Dim strSQL '执行的SQL语句
Dim objPagingConn 'ADODB CONNECTION 连接对象
Dim objPagingRS 'ADODB recordset 对象
Dim iRecordsShown
Dim I '循环变量

' Get parameters
iPageSize = 10 ' 每页显示10条记录,改这里即可实现任意条记录的显示;

If Request.QueryString("page") = "" Then
iPageCurrent = 1
Else
iPageCurrent = CInt(Request.QueryString("page"))
End If

' 本例默认按ID排序,请修改为自己的数据库排序项;
If Request.QueryString("order") = "" Then
strOrderBy = "id"
Else
strOrderBy = Request.QueryString("order")
End If

' 创建SQL
strSQL = "SELECT * FROM sample ORDER BY " & strOrderBy & ";"

Set objPagingConn = Server.CreateObject("ADODB.Connection")
objPagingConn.Open CONN_STRING


' 创建recordset对象,设置页面记录数;
Set objPagingRS = Server.CreateObject("ADODB.Recordset")
objPagingRS.PageSize = iPageSize

objPagingRS.CacheSize = iPageSize

' 要用Rs对象.open方法执行SQL。
objPagingRS.Open strSQL, objPagingConn, 3, 1

iPageCount = objPagingRS.PageCount


If iPageCurrent > iPageCount Then iPageCurrent = iPageCount
If iPageCurrent < 1 Then iPageCurrent = 1

' 屏蔽错误,如果页面数为零,显示如下信息;
If iPageCount = 0 Then
Response.Write "没有记录!"
Else

objPagingRS.AbsolutePage = iPageCurrent

' 开始输出
%>

Page <%= iPageCurrent %> of <%= iPageCount %>
总记录:<%= objPagingRS.RecordCount %>条

<%

Response.Write "<BR><BR>" & vbCrLf

' 显示表内容,以下需要你改动了,请适应你自己的数据库结构;
Response.Write "<TABLE BORDER=""1"">" & vbCrLf

' 在表头显示字段名
Response.Write vbTab & "<TR>" & vbCrLf
For I = 0 To objPagingRS.Fields.Count - 1
Response.Write vbTab & vbTab & "<TD><B>"
Response.Write objPagingRS.Fields(I).Name
Response.Write "</TD>" & vbCrLf
Next
Response.Write vbTab & "</TR>" & vbCrLf

' 循环显示所有记录,每记录一行;
iRecordsShown = 0
Do While iRecordsShown < iPageSize And Not objPagingRS.EOF
Response.Write vbTab & "<TR>" & vbCrLf
For I = 0 To objPagingRS.Fields.Count - 1
Response.Write vbTab & vbTab & "<TD>"
Response.Write objPagingRS.Fields(I)
Response.Write "</TD>" & vbCrLf
Next
Response.Write vbTab & "</TR>" & vbCrLf

' 将已经显示的记录增加 1;
iRecordsShown = iRecordsShown + 1
' 移动到下一条,使用do while ...loop循环;
objPagingRS.MoveNext
Loop

Response.Write "</TABLE>" & vbCrLf
End If

' 关闭对象和连接,清空占用的内存;
objPagingRS.Close
Set objPagingRS = Nothing
objPagingConn.Close
Set objPagingConn = Nothing

If iPageCurrent <> 1 Then
%>

<%
'#####下一句的page.asp与本文件名字相同,即全部是page.asp######
%>

<A HREF="page.asp?page=<%= iPageCurrent - 1 %>&order=<%= Server.URLEncode(strOrderBy) %>">上一页</A>
&nbsp;&nbsp;
<%

End If

If iPageCurrent < iPageCount Then
%>
<%
'##########下一句的page.asp与本文件名字相同,即全部是page.asp##########
%>


<A HREF="page.asp?page=<%= iPageCurrent + 1 %>&order=<%= Server.URLEncode(strOrderBy) %>">下一页</A>
<%
End If

%>

</BODY>
</HTML>