MS Visual InterDev6.0中七种实现分页显示的方法 我们在编制与数据库有关的Web网页时,由于要显示的数据量巨大,常常面临一个数据记录分页显示的问题。

--------------------------------------------------------------------------------进行 ADO 存取数据库时的分页显示,其实就是对 Recordset 的记录进行操作。

所以我们首先必须了解 Reordset 对象的属性和方法: BOF 属性:目前指标指到 RecordSet 的第一笔。

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

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

AbsolutePage 属性:设定当前记录的位置是位于哪一页 AbsolutePosition 属性:目前指标在 RecordSet 中的位置。

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

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

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

--------------------------------------------------------------------------------在微软的ASP编程体系中,ADO对象的建立,使得从网页访问数据库成为一件易事,特别是ADO的Recordset对象使得控制数据的输出显示更为方便、自由。

而在Visual InterDev6.0(以下简称VI6.0)中,由于Script Object Model(以下简称SOM)、Design-Time Control(以下简称DTC)以及Data Environment Object Model(以下简称DEOM)等对象模型的引入,使网页对数据库的访问设计显得更为方便。

因为主题方面的原因,关于数据库的连接,下文只给出代码和简要注释,而把重点放在如何利用Recordset对象(或控件)实现数据记录的分页显示方面。

根据我的理解,分页显示的关键就在于对ADO的Recordset对象或DTC(设计时控件)的Recordset控件的属性和方法的熟练把握上。

这七种分页显示的方法概括起来说分四类: 第一、二种我暂取名叫纯ASP法,这也是国内的ASP网站上用得最多的方法,它们的区别仅在实现技巧的不同。

这两种方法的实现最易理解,用到的对象概念也最少,对开发环境的要求也最低(只要记事本就行)。

可以说,这两种方法的实质还是CGI的编程思想,只是在程序中引入了ADO对象而已。

第四、五种暂取名叫SOM的DHTML法。

这两种方法要求在VI6.0的环境下,利用微软提出的脚本对象模型(Script Object Model)和DHTML中Table对象的与数据库绑定的新特性(许多书和文章只介绍了DHTML的CSS特性在样式设计中的运用而忽略介绍其数据绑定特性),实现在客户端控制翻页。

但它要求用户的浏览器必须是支持DHTML,如:Microsoft Internet Explorer 4.0及以上的版本。

第六种暂取名叫SOM服务器端法。

要求在VI6.0的环境下开发,它利用微软提出的脚本对象模型(Script Object Model)中的几个DTC控件:Recordset、PageObject、Grid等在服务器端(客户端)实现翻页控制。

这是一种激动人心的、全新的编程方法,它把网页看成对象(这种对象模型和传统的DOM----document object model是有区别的:DOM只能控制客户端,而SOM可控制服务器端和客户端),它真正实现了网页的面向对象编程。

但遗憾的是,也许是我个人能力有限,这种技术我个人认为还不是很成熟,比如,与浏览器的结合还不是很好,这将在后文详细说明。

第七种暂取名叫DEOM法。

它也是利用了VI6.0中建立的数据环境对象模型(Data Environment Object Model)建立Recordset对象。

这也是在网页编程上比较少见的新方法,与SOM模型相比,自有它的优点,这将在后文详述。

在后面所举的所有例子源代码,都可以直接拷贝使用,你甚至可以不懂其原理,只要把其中的粗斜体字部分换成相应自己的数据库名或字段名就可以了。

在开始详细介绍各种分页方法前,让我们先创建一个数据库:用Office97中的access自创一个Employee.mdb,其中建一个表emp,只设三个字段:emp ID,last name和first name。

为什么这么简单,是因为我们关心的是怎样处理recordset的结果。

第一种:参数直接代入法。

这种方法是用手工建立Recordset对象,利用其pagesize(每页指定显示记录数),pagecount(总页码数)和absolutepage(当前页码数)属性来控制分页的输出。

分页采用href直接带页码参数的方法来控制翻页。

网页的名字为emp1.asp。

源代码如下:%//建立与employee.mdb数据库的连接。

Set conn = Server.createObject(ADODB.Connection) conn.Open driver={Microsoft Access Driver (*.mdb)};dbq=employee.mdb //建立emp表的Recordset对象实例rs。

Set rs = Server.createObject(ADODB.Recordset) rs.Open emp, conn, 3PageSize = 10 //pagesize属性指定了每页要显示的记录条数 Page = CLng(Request(Page)) string型转化为long型 If Page 1 Then Page = 1 If Page rs.PageCount Then Page = rs.PageCount If Page 1 Then Response.Write A HREF=emp1.asp?Page=1第一页/A? Response.Write A HREF=emp1.asp?Page= (Page-1) 上一页/A? End If If Page rs.PageCount Then Response.Write A HREF=emp1.asp?Page= (Page 1) 下一页/A? Response.Write A HREF=emp1.asp?Page=rs.PageCount 最后一页/A? End If Response.write页码: Page / rs.PageCount /font //每一页的显示 //显示表头 Response.Write CENTERTABLE BORDER=1 Response.WRITE TRTD rs.Fields(emp ID).Name /TD