如何才能做到将数据库的查询结果分页显示呢

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

那么究竟如何才能做到将数据库的查询结果分页显示呢?其实方法有很多,但主要有两种:

一、将数据库中所有符合查询条件的记录一次性的都读入recordset 中,存放在内存中,然后通过ADO Recordset 对象所提供的几个专门支持分页处理的属性:PageSize( 页大小)、PageCount( 页数目) 以及

AbsolutePage( 绝对页) 来管理分页处理。

二、根据客户的指示,每次分别从符合查询条件的记录中将规定数目的记录数读取出来并显示。两者的主要差别在于前者是一次性将所有记录都读入内存然后再根据指示来依次做判断分析从而达到分页显示的效果,而后者是先根据指示做出判断并将规定数目的符合查询条件的记录读入内存,从而直接达到分页显示的功能。

我们可以很明显的感觉到,当数据库中的记录数达到上万或更多时,第一种方法的执行效率将明显低于第二种方法,因为当每一个客户查询页面时都要将所有符合条件的记录存放在服务器内存中,然后在进行分页等处理,如果同时有超过100 个的客户在线查询,那么ASP 应用程序的执行效率将大受影响。但是,当服务器上数据库的记录数以及同时在线的人数并不是很多时,两者在执行效率上是相差无几的,此时一般就采用第一种方法,因为第一种方法的ASP 程序编写相对第二种方法要简单明了得多。

在这里作者就以我们常见的ASP BBS 程序为例,来给大家分析一下如何在BBS 程序里实现分页显示功能,由于我们一般使用的BBS 程序的数据库记录数和同时访问的人数都不会太多,所以以下程序实例是使用的先前所介绍的第一种分页显示方法。

进行ADO 存取数据库时的分页显示,其实就是对Recordset 的记录进行操作。所以我们首先必须了解Reordset 对象的属性和方法:

BOF 属性:目前指标指到RecordSet 的第一笔。

EOF 属性:目前指标指到RecordSet 的最后一笔。

Move 方法:移动指标到RecordSet 中的某一条记录。

AbsolutePage 属性:设定当前记录的位置是位于哪一页

AbsolutePosition 属性:目前指标在RecordSet 中的位置。

PageCount 属性:显示Recordset 对象包括多少“页”的数据。

PageSize 属性:显示Recordset 对象每一页显示的记录数。

RecordCount 属性:显示Recordset 对象记录的总数。

下面让我们来详细认识一下这些重要的属性和方法

一、BOF 与EOF 属性

通常我们在ASP 程序中编写代码来检验BOF 与EOF 属性,从而得知目前指标所指向的RecordSet 的位置,使用BOF 与EOF 属性,可以得知一个Recordset 对象是否包含有记录或者得知移动记录行是否已经超出该ecordset 对象的范围。

如:< % if not rs.eof then ... %>

< % if not (rs.bof and rs.eof) %>

若当前记录的位置是在一个Recordset 对象第一行记录之前时,BOF属性返回true,反之则返回false。若当前记录的位置是在一个Recordset 对象最后一行记录之后时,EOF 属性返回true,反之则返回false。BOF 与EOF 都为False:表示指标位于RecordSet 的当中。BOF 为True:目前指标指到RecordSet

的第一笔记录。EOF 为True:目前指标指到RecordSet 的最后一笔记录。BOF 与EOF 都为True:在RecordSet 里没有任何记录。

二、Move 方法

您可以用Move 方法移动指标到RecordSet 中的某一笔记录,语法如下:

rs.Move NumRecords,Start

这里的“rs”为一个对象变量,表示一个想要移动当当前记录位置的Recordset 对象;“NumRecords”是一个正负数运算式,设定当前记录位置的移动数目;“start”是一个可选的项目,用来指定记录起始的标签。所有的Recordset 对象都支持Move 方法,如果NumRecords 参数大于零,当前记录位置向末尾的方向移动;如果其小于零,则当前记录位置向开头的方向移动;如果一个空的Recordset 对象调用Move 方法,将会产生一个错误。

MoveFirst 方法:将当前记录位置移至第一笔记录。

MoveLast 方法:将当前记录位置移至最后一笔记录。

MoveNext 方法:将当前记录位置移至下一笔记录。

MovePrevious 方法:将当前记录位置移至上一笔记录。

Move [n] 方法:移动指标到第n 笔记录,n 由0 算起。

三、AbsolutePage 属性

AbsolutePage 属性设定当前记录的位置是位于哪一页的页数编号;使用PageSize 属性将Recordset 对象分割为逻辑上的页数,每一页的记录数为PageSize( 除了最后一页可能会有少于PageSize 的记录数)。这里必须注意并不是所有的数据提供者都支持此项属性,因此使用时要小心。与AbsolutePosition 属性相同,AbsolutePage 属性是以 1 为起始的,若当前记录为Recordset 的第一行记录,AbsolutePage 为1。可以设定AbsolutePage 属性,以移动到一个指定页的第一行记录位置。

四、AbsolutePosition 属性

若您需要确定目前指标在RecordSet 中的位置,您可以用AbsolutePosition 属性。AbsolutePosition 属性的数值为目前指标相对於第一笔的位置,由 1 算起,即第一笔的AbsolutePosition 为1。注意, 在存取RecordSet 时,无法保证RecordSet 每次都以同样的顺序出现。若要启用AbsolutePosition,必须先设定为使用用户端cursor( 指针),asp 码如下:rs2.CursorLocation = 3

五、PageCount 属性

使用PageCount 属性,决定Recordset 对象包括多少“页”的数据。这里的“页”是数据记录的集合,大小等于PageSize 属性的设定,即使最后一页的记录数比PageSize 的值少,最后一页也算是PageCount 的一页。

必须注意也并不是所有的数据提供者都支持此项属性。

六、PageSize 属性

PageSize 属性是决定ADO 存取数据库时如何分页显示的关键,使用它就可以决定多少记录组成一个逻辑上的“一页”。设定并建立一个页的大小,从而允许使用AbsolutePage 属性移到其它逻辑页的第一条记录。PageSize 属性能随时被设定。

七、RecordCount 属性

这也是一个非常常用和重要的属性,我们常用RecordCount 属性来找出一个Recordset 对象包括多少条记录。如:

< % totle=RS.RecordCount %>

相关文档
最新文档