asp分页解析

我们在开发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
%>
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值