第四章：ADO存取数据时如何实现留言记录的分页显示

我们知道：对于一个留言簿，如果我们只让上网者能看到自己的留言而看不到其他人的留言，那么这类留言簿也就只能适用于某些特殊的地方（例如“客户意见返馈表”或“投诉留言”之类的留言，因为假如你是老板的话，你也不会愿意将自己的“伤疤”随便揭开给人看）。因此我们必须令每一位上网者都能看到留言簿中的所有留言。为了提高页面的读取速度，我们将留言簿中的留言分成多页来显示，每页显示一定数目的留言数，譬如5条。 讲了这许多，那么到底如何实现留言记录的分页显示功能呢？如果我们对ADO的Recordset对象清楚的话，其实实现起来并不难。因为进行ADO存取数据库时的分页显示，就是对Recordset的记录进行操作。因此在没讲解程序之前，我觉得很有必要先给大家介绍一下有关Recordset对象方面的知识。 主要的ADO对象有三个：Connection、Command和Recordset。Connection对象能够建立数据与应用程序之间的联系，在建立联系后，Command和Recordset对象用来要求、存储或更新数据。Command对象主要担任数据库查询(Database Query）的角色，而 Recordset对象则是三者之中最为特别，功能亦最为强大，由数据取得的数据集合就存储于Recordset中，该返回的Recordset数据集合取得后再通过服务器端的脚本语言环境加于处理、分析、显示数据于客户浏览器上。 现将Recordset对象所提供的所有内部属性与其功能简述罗列如下： AbsolutePage属性--目前的绝对数据页位置 AbsolutePosition属性--目前的绝对数据位置 ActiveConnection属性--与Connection、Command对象主动链接 BOF属性--数据集的开头边界 Bookmark属性--提供游标位置的书签功能 CacheSize属性--Recordset内数据所暂存的内存大小 CursorLocation属性--控制游标的类型为服务器端或客户端 CursorType属性--控制如何由服务器端数据库取回数据 EOF属性--记录集的结尾边界 EditMode属性--控制目前数据的处理状态 Filter属性--控制欲显示或隐藏的数据内容 LockType属性--控制数据更新的模式 MaxRecords属性--允许由服务器端取回的最大记录行数目 PageCount属性--数据页总数 PageSize属性--控制每一数据页内的记录行 RecordCount属性--由服务器端取回的记录行总数 Source属性--数据查询信息 Status属性--最近一行数据处理后的状态或信息
在了解了Recordset对象的以上属性和方法后，我们开始来学习如何实现留言记录的分页显示功能。在以下的学习当中，前面几章已学过的知识我在这里就不再赘述，我们只在这里重点学习处理留言记录分页的page2.asp文件。
< !--#include file="adovbs.inc" --> < !--#include file="self2.asp" --> '调用adovbs.inc文件和留言页面self2.asp。 '-=此处已略去Web页面的HTML代码，具体内容可下载源代码后查看=- < % Set conn = Server.CreateObject("ADODB.Connection") conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & _ 　　　　　　　　　　　　　　　Server.MapPath("book2.mdb") '打开数据库book2.mdb并建立Recordset对象。 Set rs = Server.CreateObject("ADODB.Recordset") sql = "Select * From GuestBook Order By 时间 DESC" '选取数据表GuestBook中的所有数据记录，并按时间顺序对其排序。 rs.Open sql, conn, adOpenStatic '将数据记录打开成Recordset的adOpenStatic类型。 Sub ShowOnePage( rs, Page ) '利用Page参数来指定页码。 rs.AbsolutePage = Page For iPage = 1 To rs.PageSize self2 rs rs.MoveNext If rs.EOF Then Exit For '如果显示的页码是最后一页，则该页的数据记录条数可能会不满5条，所以在这里要判断是否移过了整个数据记录的最末端。 Next End Sub rs.PageSize = 5 '设置你一页要显示的多少条留言记录。 Page = CLng(Request("Page")) If Page < 1 Then Page = 1 If Page >rs.PageCount Then Page = rs.PageCount ShowOnePage rs, Page '检查Request("Page")所读取的页码是否在有效的范围内。 %> < form action="page2.asp" method="GET" align="right"> < p> < a href="guestbook2.htm">返回留言表单< /a> < % If Page <> 1 Then Response.Write "< A HREF=page2.asp?Page=1>第一页< /A>" Response.Write "< A HREF=page2.asp?Page=" & (Page-1) & ">上一页< /A>" End If If Page <> rs.PageCount Then Response.Write "< A HREF=page2.asp?Page=" & (Page+1) & ">下一页< /A>" Response.Write "< A HREF=page2.asp?Page=" & rs.PageCount & ">最后一页 < /A>" End If %> 页数：< font color="#FF0000">< %=Page%>/< %=rs.PageCount%>< /font> '< %=Page%>表示当前所在的页码，< %=rs.PageCount%>表示数据页的总数。