【asp源码栏目提醒】:网学会员为广大网友收集整理了,asp分页显示 - 网站开发与设计,希望对大家有所帮助!
asp分页显示
asp分页显示如果你使用过目前众多网站上的电子公告板程序的话那你应该会知道电子公告板程序为了提高页面的读取速度一般不会将所有的帖子全部在一页中罗列出来而是将其分成多页显示每页显示一定数目的帖子数譬如20条。
想不想了解如何实现分页显示请看本文那么究竟如何才能做到将数据库的查询结果分页显示呢其实方法有很多但主要有两种一、将数据库中所有符合查询条件的记录一次性的都读入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对象是否包含有记录或者得知移动记录行是否已经超出该Recordset对象的范围。
如if not rs.eof then.if notrs.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 NumRecordsStart这里的rs为一个对象变量表示一个想要移动当当前记录位置的Recordset对象NumRecords是一个正负数运算式设定当前记录位置的移动数目start是一个可选的项目用来指定记录起始的标签。
所有的Recordset对象都支持Move方法如果NumRecords参数大于零当前记录位置向末尾的方向移动如果其小于零则当前记录位置向开头的方向移动如果一个空的Recordset对象调用Move方法将会产生一个错误。
MoveFirst方法将当前记录位置移至第一笔记录。
MoveLast方法将当前记录位置移至最后一笔记录。
MoveNext方法将当前记录位置移至下一笔记录。
MovePrevious方法将当前记录位置移至上一笔记录。
Moven方法移动指标到第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.CursorLocation3五、PageCount属性使用PageCount属性决定Recordset对象包括多少页的数据。
这里的页是数据记录的集合大小等于PageSize属性的设定即使最后一页的记录数比PageSize的值少最后一页也算是PageCount的一页。
必须注意也并不是所有的数据提供者都支持此项属性。
六、PageSize属性PageSize属性是决定ADO存取数据库时如何分页显示的关键使用它就可以决定多少记录组成一个逻辑上的一页。
设定并建立一个页的大小从而允许使用AbsolutePage属性移到其它逻辑页的第一条记录。
PageSize属性能随时被设定。
七、RecordCount属性这也是一个非常常用和重要的属性我们常用RecordCount属性来找出一个Recordset对象包括多少条记录。
如totleRS.RecordCount在了解了Recordset对象的以上属性和方法后我们来考虑一下如何运用它们来达到我们分页显示的目的。
首先我们可以为PageSize属性设置一个值从而指定从记录组中取出的构成一个页的行数然后通过RecordCount属性来确定记录的总数再用记录总数除以PageSize就可得到所显示的页面总数最后通过AbsolutePage属性就能完成对指定页的访问好象很并不复杂呀下面让我们来看看程序该如何实现呢我们建立这样一个简单的BBS应用程序它的数据库中分别有以下五个字段ID每个帖子的自动编号subject每个帖子的主题name加帖用户的姓名email用户的电子邮件地址postdate加帖的时间。
数据库的DSN为bbs。
我们将显示帖子分页的所有步骤放在一个名为ShowList的过程中方便调用。
程序如下--BBS显示帖子分页--Sub ShowListPgSz20设定开关指定每一页所显示的帖子数目默认为20帖一页Set ConnServer.CreateObjectADODB.ConnectionSet RSServer.CreateObjectADODB.RecordSetsqlSELECTFROM message order by ID DESC查询所有帖子并按帖子的ID倒序排列Conn.OpenbbsRS.open sqlConn11 If RS.RecordCount0 then response.writeP center对不起数据库中没有相关信息/center/Pelse RS.PageSizeCintPgSz设定PageSize属性的值TotalINTRS.recordcount/PgSz-1-1计算可显示页面的总数PageNoRequestpagenoif PageNoThen PageNo1 else PageNoPageNo1 PageNoPageNo-1 end if ScrollActionRequestScrollActionif ScrollAction上一页