已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ADO 存取数据库时的分页显示 如果你使用过目前众多网站上的电子公告板程序的话 那 你应该会知道电子公告板程序为了提高页面的读取速度 一般不会将所有的帖子全部在一 页中罗列出来 而是将其分成多页显示 每页显示一定数目的帖子数 譬如 20 条 想不 想了解如何实现分页显示 请看本文 动态网站设计十八般武艺 ASP 篇 一文从第一期至今已和朋友们一起度过了大半 个年头 相信通过在这一段时间中的学习 实践到再学习 再实践 大家已经能够熟练运 用 ASP 的内建对象 ActiveX 组件去编写一些基本的 ASP 应用程序 从我收到的朋友们 的来信中可以明显的感觉到 大家的 ASP 功力正不断地提升 最近很多朋友来信希望我写 一些 ASP 在现实运用中的实例 因此 从本期开始我决定将 动态网站设计十八般武艺 ASP 篇 的定位从介绍和学习 ASP 基础知识转向到 ASP 实际运行的探讨和深化 应朋友 们的要求 在本期中我将给大家着重谈一谈 ADO 存取数据库时如何分页显示 的问题 什么是 ADO 存取数据库时的分页显示 如果你使用过目前众多网站上的电子公告板程 序的话 那你应该会知道电子公告板程序为了提高页面的读取速度 一般不会将所有的帖 子全部在一页中罗列出来 而是将其分成多页显示 每页显示一定数目的帖子数 譬如 20 条 这就是数据库查询的分页显示 如果你还不明白 去看看 yahoo 等搜索引擎的查询结 果就会明白了 那么究竟如何才能做到将数据库的查询结果分页显示呢 其实方法有很多 但主要有 两种 一 将数据库中所有符合查询条件的记录一次性的都读入 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 对象的范围 如 60 if not rs eof then 62 60 if not rs bof and rs eof 62 若当前记录的位置是在一个 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 对象包括多少条记录 如 60 totle RS RecordCount 62 在了解了 Recordset 对象的以上属性和方法后 我们来考虑一下 如何运用它们来达 到我们分页显示的目的 首先 我们可以为 PageSize 属性设置一个值 从而指定从记录 组中取出的构成一个页的行数 然后通过 RecordCount 属性来确定记录的总数 再用记录 总数除以 PageSize 就可得到所显示的页面总数 最后通过 AbsolutePage 属性就能完成 对指定页的访问 好象很并不复杂呀 下面让我们来看看程序该如何实现呢 我们建立这样一个简单的 BBS 应用程序 它的数据库中分别有以下五个字段 ID 每个帖子的自动编号 subject 每个帖子的主题 name 加帖用户的姓名 email 用户的电子邮件地址 postdate 加帖的时间 数据库的 DSN 为 bbs 我们将显示帖子分页的所有步骤放在一个名为 ShowList 的过程中 方便调用 程序 如下 BBS 显示帖子分页 60 Sub ShowList 62 60 PgSz 20 设定开关 指定每一页所显示的帖子数目 默认为 20 帖一页 Set Conn Server CreateObject ADODB Connection Set RS Server CreateObject ADODB RecordSet sql SELECT FROM message order by ID DESC 查询所有帖子 并按帖子的 ID 倒序排列 Conn Open bbs RS open sql Conn 1 1 If RS RecordCount 0 then response write 60 P 62 60 center 62 对不起 数据库中没有相关信息 60 center 62 60 P 62 else RS PageSize Cint PgSz 设定 PageSize 属性的值 Total INT RS recordcount PgSz 1 1 计算可显示页面的总数 PageNo Request pageno if PageNo Then PageNo 1 else PageNo PageNo 1 PageNo PageNo 1 end if ScrollAction Request ScrollAction if ScrollAction 上一页 Then PageNo PageNo 1 end if if ScrollAction 下一页 Then PageNo PageNo 1 end if if PageNo 60 1 Then PageNo 1 end if n 1 RS AbsolutePage PageNo Response Write 60 CENTER 62 position RS PageSize PageNo pagebegin position RS PageSize 1 if position 60 RS RecordCount then pagend position else pagend RS RecordCount end if Response Write 60 P 62 60 font color Navy 62 60 B 62 数据库查询结果 60 B 62 Response Write 共有 font 62 60 p 62 Response Write 60 TABLE WIDTH 600 BORDER 1 CELLPADDING 4 CELLSPACING 0 BGCOLOR FFFFFF 62 Response Write 60 TR BGCOLOR 5FB5E2 62 60 FONT SIZE 2 62 60 TD 62 60 B 62 主题 60 B 62 60 TD 62 60 TD 62 60 B 62 用户 60 B 62 60 TD 62 60 TD 62 60 B 62 Email 60 B 62 60 TD 62 60 TD 62 60 B 62 发布日期 60 B 62 60 TD 62 60 FONT 62 60 TR BGCOLOR FFFFFF 62 Do while not RS is nothing RowCount RS PageSize Do While Not RS EOF and rowcount 62 0 If n 1 then Response Write 60 TR BGCOLOR FFFFFF 62 ELSE Response Write 60 TR BGCOLOR EEEEEE 62 End If n 1 n 62 60 TD 62 60 span style font size 9pt 62 60 A href view asp key 60 RS ID 62 62 60 RS subject 62 60 A 62 60 span 62 60 td 62 60 TD 62 60 span style font size 9pt 62 60 RS name 62 60 A 62 60 span 62 60 td 62 60 TD 62 60 span style font size 9pt 62 60 a href mailto 60 RS email 62 62 60 RS email 62 60 a 62 60 span 62 60 TD 62 60 TD 62 60 span style font size 9pt 62 60 RS postdate 62 60 span 62 60 td 62 60 TR 62 60 RowCount RowCount 1 RS MoveNext Loop set RS
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 消防监控室考试题及答案
- 2025年新乡保管员考试题及答案
- 2025年高考表语从句真题及答案
- 配电线路工技能题库及答案
- 大型火力发电厂安全考试题库及答案
- 2025年先进制造技术考试试题及答案
- 矿产勘查工程技术人员矿体圈定方法题库及答案
- 2025年国家工作人员学法用法考试复习重点试题及答案
- 2025工勤考试收银审核员高级技师考试题含答案
- 2025年生化生态实验题库及答案
- 2025年镇残联年度工作总结(6篇)
- 医院消防知识题库及答案
- 电影音乐欣赏智慧树知到期末考试答案章节答案2024年华南农业大学
- (完整)教师编单位同意报考证明模板
- 2024年广东深圳市龙华区社区网格员招聘笔试冲刺题(带答案解析)
- 2024年金华义乌市水处理有限责任公司招聘笔试参考题库附带答案详解
- 易损、易碎管理处置制度方案
- 部编版八年级历史上册《第18课从九一八事变到西安事变》教学设计
- GB/T 34940.1-2017静态切换系统(STS)第1部分:总则和安全要求
- 高电压技术课件讲解
- 体检报告单入职体检模板
评论
0/150
提交评论