我们在开发asp项目的时候,一般情况下都会涉及到数据库,大体可以分select、insert、update这三种操作,在这三种操作中,select读取数据操作是最常用的一种操作,当我们要从数据库中读取大量的数据显示到网页上的时候,就不可避免的要进行分页。究竟asp怎么样对读取的大量数据进行分页呢??某某x牛人说:“有问题去找google或baidu,不要老是来问我。”,于是我们就上baidu和google找了一大堆的分页程序,一看找到的这些分页程序,大多都是N多的代码,看到头晕。。其实核心的分页代码就只有几行,其它的大多数代码都是作用于装饰。下面我就浅谈一下asp怎么样对select到大量的数据进行分页。
下面看一段简单的分页程序
<%
set conn=server.createobject("adodb.connection") conn.open "provider=microsoft.jet.oledb.4.0;data source="&server.mappath("ttt.mdb") set rs=server.createobject("adodb.recordset") '创建记录集对象 rs.open "select * from tab",conn,1,3 rs.pagesize=5 '指定每页显示5条记录 rs.absolutepage=2 '定位到第2页 for i=1 to rs.pagesize if rs.eof then exit for '如果到最后一条记录,则退出for循环 response.write rs("ID") & "<br>" rs.movenext next %> 记录集对象的部分方法: rs.movenext将记录指针从当前的位置向下移一行 rs.absoluteposition=N将记录指针移到数据表第N行 rs.absolutepage=N将记录指针移到第N页的第一行 rs.pagesize=N设置每页为N条记录 rs.pagecount根据pagesize的设置返回总页数 rs.recordcount返回记录总数 rs.bof返回记录指针是否超出数据表首端,true表示是,false为否 rs.eof返回记录指针是否超出数据表末端,true表示是,false为否 补充说明一下,rs.absolutepage=N这个记录集属性是分页的关健属性,通过此属性可移动记录指针到第N页的首记录。如:rs.absolutepage=2表示记录指针移动到第2页的第一条记录。看到这里,大家对分页的原理有个模糊的认识了,每一页里面包含了若干条记录,当执行翻页操作的时候,记录指针会按照每一页的记录数(rs.pagesize)进行移动。即翻1页,记录指针移动rs.pagesize*1,翻2页,记录指针移动rs.pagesize*2,翻3页,记录指针移动rs.pagesize*3,…… 我们再对上面的简单分页进一步改装,使其有“上一页”和“下一页”。
<%
set conn=server.createobject("adodb.connection") conn.open "provider=microsoft.jet.oledb.4.0;data source="&server.mappath("ttt.mdb") set rs=server.createobject("adodb.recordset") '创建记录集对象 rs.open "select * from tab",conn,1,3 rs.pagesize=5 '指定每页显示5条记录 if request.querystring("page") <> empty then page=request.querystring("page") else page=1 end if rs.absolutepage=page '定位到URL后面参数page指定的页码 for i=1 to rs.pagesize if rs.eof then exit for '如果到最后一条记录,则退出for循环 response.write rs("ID") & "<br>" rs.movenext next response.write "<a href='?page="&page-1&"'>上一页</a> " response.write " <a href='?page="&page+1&"'>下一页</a>" %> 现在程序具有“上一页”和“下一页”的功能了,但未能一些特殊情况进行处理,比如:到了最首页之后“上一页”链接应该失效,到了最尾页的时候“下一页”链接应该失效。我们再继续完善
<%
set conn=server.createobject("adodb.connection") conn.open "provider=microsoft.jet.oledb.4.0;data source="&server.mappath("ttt.mdb") set rs=server.createobject("adodb.recordset") '创建记录集对象 rs.open "select * from tab",conn,1,3 rs.pagesize=5 '指定每页显示5条记录 if request.querystring("page") <> empty then page=request.querystring("page") else page=1 end if rs.absolutepage=page '定位到URL后面参数page指定的页码 for i=1 to rs.pagesize if rs.eof then exit for '如果到最后一条记录,则退出for循环 response.write rs("ID") & "<br>" rs.movenext next if cint(page) <> 1 then response.write "<a href='?page=1'>首页</a> " response.write "<a href='?page="&page-1&"'>上一页</a> " else response.write "首页 上一页 " end if if cint(page) <> rs.pagecount then response.write " <a href='?page="&page+1&"'>下一页</a> " response.write " <a href='?page="&rs.pagecount&"'>尾页</a> " else response.write "下一页 尾页 " end if response.write page & "/" & rs.pagecount %> 扩展补充一下,在记录集里有一个absoluteposition=N属性指定记录指针定位到第N条记录上,我们根据分页的原理,可以计算到每翻p页,记录指针要移动rs.pagesize*p,所以我们也可以这样来分页,请看下面的实例代码
<%
set conn=server.createobject("adodb.connection") conn.open "provider=microsoft.jet.oledb.4.0;data source="&server.mappath("ttt.mdb") set rs=server.createobject("adodb.recordset") '创建记录集对象 rs.open "select * from tab",conn,1,3 rs.pagesize=5 '指定每页显示5条记录 if request.querystring("page") <> empty and request.querystring("page") <> 1 then page=request.querystring("page") rs.absoluteposition=(page-1)*rs.pagesize else page=1 rs.absoluteposition=1 '记录指针移动到第1条 end if for i=1 to rs.pagesize if rs.eof then exit for '如果到最后一条记录,则退出for循环 response.write rs("ID") & "<br>" rs.movenext next if cint(page) <> 1 then response.write "<a href='?page=1'>首页</a> " response.write "<a href='?page="&page-1&"'>上一页</a> " else response.write "首页 上一页 " end if if cint(page) <> rs.pagecount then response.write " <a href='?page="&page+1&"'>下一页</a> " response.write " <a href='?page="&rs.pagecount&"'>尾页</a> " else response.write "下一页 尾页 " end if response.write page & "/" & rs.pagecount %> |
asp分页解析
最新推荐文章于 2021-07-12 10:16:41 发布