ASP数据库应用中查询结果的分页显示

   数据库应用中,在响应用户查询要求时,如果查询结果记录条数很多,很少会将结果一 下子传给用户,一般就考虑将结果分为多页显示,每页显示固定数目的记录.这是一种常见 的方法.在ASP应用中如何实现呢?

  这要用到ADO中数据集(RecordSet)对象的一些属性,列举如下:
PageSize:每页要显示的记录的数目
AbsolutePage:要显示的当前页号
  通过设置上面的两个属性,可实现分页显示.

值得注意的是,在使用AbsolutePage时,不能使用RecordSet的缺省属性.RecordSet对象的方法Open的具体调用语法如下(具体请参见ASP帮助文件):
RecordSet.Open strSQL,AConnection,CursorType,Options
其中CursorType的缺省值为0,此时使用AbsolutePage会出现错误,应将其指定为1.

  下面将结合一个具体的例子来说明,请注意页面代码中的说明语句.

  假设用户的查询语句为 http://www.yourcompany.com/query2.asp,来查询用户资料.
querys2.asp将从数据库Contact1中查询并显示用户资料.

  可在query2.asp中作如下处理:
<%
rem 假设前面已建立了数据库连接AConnection

rem 假设用户查询语句中有一个指定页号的参数PageNumber
if Request.QueryString("PageNumber").count > 0 then '如果指定页号,则以指定页号为依据 PageNumber = Request.QueryString("PageNumber")(1)
else
PageNumber = 1 '没有指定页号,缺省页号为1
end if

RecordNumberPerPage = 5 '每页显示5条记录

rem 下面两行语句执行查询,注意Open语句中应指定第三个参数
set ARecordSet = Server.CreateObject("ADODB.RecordSet")
ARecordSet.open "select * from contact1",AConnection,1

ARecordSet.PageSize = RecordNumberPerPage '指定每页的记录数目
ARecordSet.AbsolutePage = PageNumber '指定当前的页号


Response.Write "<br>每页有"&ARecordSet.PageSize&"条记录"
Response.Write "<br>共有"&ARecordSet.PageCount&"页"
Response.Write "<br>这是第"&PageNumber&"页"

rem 以表格的形式显示查询结果
Response.Write "<Table border=1>"

rem 显示字段名
Response.Write "<TR>"
For FieldNo = 0 to ARecordSet.Fields.count - 1
Response.Write "<TD>"&ARecordSet( FieldNo ).Name&"</TD>"
Next
Response.Write "</TR>"

rem 显示查询
RecordCounter = 0
Do while not ARecordSet.eof
RecordCounter = RecordCounter + 1

rem '如果要显示的记录数大于每页记录数目,则停止显示
if RecordCounter > RecordNumberPerPage then
Exit do
end if

rem 显示一条记录
Response.Write "<TR>"
For FieldNo = 0 to ARecordSet.Fields.count - 1
Response.Write "<TD>"&ARecordSet( FieldNo )&"</TD>"
Next
Response.Write "</TR>"

rem 转向下一条记录
ARecordSet.MoveNext
Loop

Response.Write "</Table>"

if PageNumber > 1 then '如果不是第一页,则提示上一页
Response.Write "<p><A href = query2.asp?PageNumber="&(PageNumber-1)&">[上一页]</a>"
end if

if not ARecordSet.eof then '如果还有记录没有显示,则提示下一页
Response.Write "<A href = query2.asp?PageNumber="&(PageNumber+1)&">[下一页]</a>"
end if

ARecordSet.close
AConnection.close
%>

以上程序在PWin98+PWS4.0+IE4.0下调试通过.
上面例子的源代码和Access数据库,可到作者主页http://wangfajun.163.net下载.

(作者: 王发军 wangfajun@163.net http://wangfajun.163.net)