版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本文格式为Word版下载后可任意编辑和复制第第页王力公告查询
那么毕竟如何才能做到将数据库的查询结果分页显示呢?其实方法有许多,但主要有两种:
一、将数据库中全部符合查询条件的记录一次性的都读入recordset中,存放在内存中,然后通过ADORecordset对象所供应的几个特地支持分页处理的属性:PageSize(页大小)、PageCount(页数目)以及
AbsolutePage(肯定页)来管理分页处理。
二、依据客户的指示,每次分别从符合查询条件的记录中将规定数目的记录数读取出来并显示。两者的主要差别在于前者是一次性将全部记录都读入内存然后再依据指示来依次做推断分析从而达到分页显示的效果,而后者是先依据指示做出推断并将规定数目的符合查询条件的记录读入内存,从而直接达到分页显示的功能。
我们可以很明显的感觉到,当数据库中的记录数达到上万或更多时,第一种方法的执行效率将明显低于第二种方法,因为当每一个客户查询页面时都要将全部符合条件的记录存放在服务器内存中,然后在进行分页等处理,假如同时有超过100个的客户在线查询,那么ASP应用程序的执行效率将大受影响。但是,当服务器上数据库的记录数以及同时在线的人数并不是许多时,两者在执行效率上是相差无几的,此时一般就采纳第一种方法,因为第一种方法的ASP程序编写相对第二种方法要简洁明白得多。
在这里就以我们常见的ASPBBS程序为例,来给大家分析一下如何在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对象的范围。
如:%ifnotrs.eofthen...%
%ifnot(rs.bofandrs.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.MoveNumRecords,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%
在了解了Recordset对象的以上属性和方法后,我们来考虑一下,如何运用它们来达到我们分页显示的目的。首先,我们可以为PageSize属性设置一个值,从而指定从记录组中取出的构成一个页的行数;然后通过RecordCount属性来确定记录的总数;再用记录总数除以PageSize就可得到所显示的页面总数;最终通过AbsolutePage属性就能完成对指定页的访问好象很并不简单呀,下面让我们来看看程序该如何实现呢?
我们建立这样一个简洁的BBS应用程序,它的数据库中分别有以下五个字段:“ID”,每个帖子的自动编号;“subject”,每个帖子的主题;“name”,加帖用户的姓名;“email”,用户的电子邮件地址;“postdate”,加帖的时间。数据库的DSN为“bbs”。我们将显示帖子分页的全部步骤放在一个名为“ShowList()”的过程中,便利调用。程序如下:
\BBS显示帖子分页
%SubShowList()%
%
PgSz=20\设定开关,指定每一页所显示的帖子数目,默认为20帖一页SetConn=Server.CreateObject(\ADODB.Connection\)
SetRS=Server.CreateObject(\ADODB.RecordSet\)
sql=\SELECT*FROMmessageorderbyIDDESC\
\查询全部帖子,并按帖子的ID倒序排列
Conn.Open\bbs\
RS.opensql,Conn,1,1
IfRS.RecordCount=0then
response.write\Pcenter对不起,数据库中没有相关信息!
/center/P\
else
RS.PageSize=Cint(PgSz)\设定PageSize属性的值
Total=INT(RS.recordcount/PgSz*-1)*-1\计算可显示页面的总数
PageNo=Request(\pageno\)
ifPageNo=\\Then
PageNo=1
else
PageNo=PageNo+1
PageNo=PageNo-1
endif
ScrollAction=Request(\ScrollAction\)
ifScrollAction=\上一页\Then
PageNo=PageNo-1
endif
ifScrollAction=\下一页\Then
PageNo=PageNo+1
endif
ifPageNo1Then
PageNo=1
endif
RS.AbsolutePage=PageNo
Response.Write\CENTER\
position=RS.PageSize*PageNo
pagebegin=position-RS.PageSize+1
ifpositionRS.RecordCountthen
pagend=position
else
pagend=RS.RecordCount
endif
Response.Write\Pfontcolor=\Navy\B数据库查询结果:/B\Response.Write\(共有\RS.RecordCount\条符合条件的信息,
显示\pagebegin\-\pagend\)/font/p\
Response.Write\TABLEWIDTH=600BORDER=1CELLPADDING=4CELLSPACING=0BGCOLOR=#FFFFFF\
Response.Write\TRBGCOLOR=#5FB5E2FONTSIZE=2TDB主题/B/TDTDB用户/B/TDTDBEmail/B/TDTDB发布日期/B/TD/FONTBGCOLOR=#FFFFFF\
Dowhilenot(RSisnothing)
RowCount=RS.PageSize
DoWhileNotRS.EOFandrowcount0
Ifn=1then
Response.Write\TRBGCOLOR=#FFFFFF\
ELSE
Response.Write\TRBGCOLOR=#EEEEEE\
EndIf
n=1-n%
TDspanstyle=\font-size:9pt\
Ahref=\view.asp?key=%=RS(\ID\)%\%=RS(\subject\)%/A/span/td
TDspanstyle=\font-size:9pt\
%=RS(\name\)%/A/span/td
TDspanstyle=\font-size:9pt\
ahref=\mailto:%=RS(\email\)%\%=RS(\email\)%/a/span/TD
TDspanstyle=\font-size:9pt\
%=RS(\postdate\)%/span/td
/TR
%
RowCount=RowCount-1
RS.MoveNext
Loop
setRS=RS.NextRecordSetTR
Conn.Close
setrs=nothing
setConn=nothing
%
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 专业加盟合作协议(2024版)细则版
- 2025年茶园租赁合同示范文本8篇
- 2024版轿车租借合同:全面保障合同条款版
- 2025年度柴油发电机及配件全球采购合同范本4篇
- 2024年04月陕西西安银行金融市场及资产管理业务人才招考笔试历年参考题库附带答案详解
- 专业空气能热泵热水器安装工程协议规范文本版B版
- 专业设备采购销售协议:2024版细则版A版
- 2025年度绿色建筑场调研与投资评估服务合同4篇
- 二零二五年度瓷砖行业供应链管理合同3篇
- 2025年环保设备产品区域代理合同4篇
- GA 1551.5-2019石油石化系统治安反恐防范要求第5部分:运输企业
- 拘留所教育课件02
- 冲压生产的品质保障
- 《肾脏的结构和功能》课件
- 2023年湖南联通校园招聘笔试题库及答案解析
- 上海市徐汇区、金山区、松江区2023届高一上数学期末统考试题含解析
- 护士事业单位工作人员年度考核登记表
- 天津市新版就业、劳动合同登记名册
- 产科操作技术规范范本
- 人教版八年级上册地理全册单元测试卷(含期中期末试卷及答案)
- 各种焊工证件比较和释义
评论
0/150
提交评论