当前位置: 首页 > 图文教程 > 网络编程 > ASP > ASP教程:不连数据库进行查询分页的思路

ASP
Access 2000 数据库 80 万记录通用快速分页类
Microsoft JET Database Engine 错误 ''80004005'' 未指定的错误的完美解决方法
收藏的ASP常用的函数集
asp分页的一个类
ASP开发网页牢记注意事项
ASP下操作Excel技术总结分析
ASP数据岛操作类
ASP经典分页类
asp论坛在线人数统计研究
ASP调用SQL SERVER存储程序
asp输出bmp
ASP连接数据库的全能代码
ASP面向对象编程探讨及比较
web文件管理器的后续开发
一小偷类!!有兴趣的可以看看
利用ASP实现事务处理的方法
大数量查询分页显示 微软的解决办法
如何把ASP编写成DLL
asp实现树型结构
超级ASP大分页_我的类容我做主

ASP教程:不连数据库进行查询分页的思路


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 215 ::
收藏到网摘: n/a

看了不少介绍,知道set rs=conn.execute(sql)的执行效率比rs.open sql,conn,1,1要高很多,但是set rs=conn.execute(sql)这种执行方式也有很多不足,首先它不具有分页属性,比如rs.pagesize,rs,absolutepage等属性,这样的话,通过这种方式set rs=conn.execute(sql)执行的速度虽然快了,但是却不能按普通方式进行分页,怎么办呢??

  第二天,查了一下网上的资料,突然想到是否可以把所需数据提到一个数组里,然后对数组进行分页呢?首先把set rs=conn.execute(sql)查询出来的结果通过rs.getrows()取出来附给一个数组,于是我就在各网站上找分页的帖子,虽然发现不少高效率分页的帖子(包括存储过程等),可结果发现全都是需要通过SQL执行的,即翻页的时候也需要执行SQL语句,此时头都晕了,优化的也只是SQL语句,此时实在没办法,只好自己努力了!终于完成了一个数组分页的粗稿,代码不是很完善,让大家一起来研究一下!代码如下:
首先有一个index.asp查询页:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head>

<body><FORM id="SearchForm" name="SearchForm" method="post" action="search.asp?act=cha">
<div class=input>
<input id=keyword onmouseover=this.focus() title="快速搜索您的留言记录" onfocus=this.select() class="in"  maxlength=35 name=keyword />
<select style="width:120px;margin-top:-25px" name="ChannelID">
<option value="k2">留言人</option>
<option value="k1">留言内容</option>
</select>
  <Input id=search_btn type=submit value="查询">
</div>
</FORM>
</body>
</html>
search.asp的代码:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head>
<body>
<%
If request.querystring("act")="cha" Then
search_type=request.FORM("ChannelID")
keywords=request.form("keyword")
if search_type="k1" then '按照留言内容搜索
sql="select * from gbook_rec where g_content like '%"&keywords&"%'"
ElseIf search_type="k2" then
'if search_type="k2" then '按照留言人搜索
sql="select * from gbook_rec where g_name like '%"&keywords&"%'"
Else
response.end
end If
Set rs=conn.execute(sql)
If  rs.eof And rs.bof Then
%>
<div class="search">没有查找到您要的记录!</div>
<%
response.End
Else
aResults=rs.getrows()'取出数据放入数组ROW中
application("data")=aResults
Set rs=nothing
conn.close '关闭数据库
End IF
End If

aResults=application("data")
Dim i,row,pagesize,epage,numb,pagecount,fenye
numb=UBound(aResults,2)+1 '总记录行数
pagesize=2 '每页条数

If numb Mod pagesize = 0 Then '判断总页数
pagecount=Int(numb/pagesize)
Else
pagecount=Int(numb/pagesize)+1
End If

epage=request.querystring("page")

If epage="" Then epage=1    

For i=(epage-1)*pagesize To epage*pagesize-1
If i>UBound(aResults,2) Or i<0 Then Exit for
%>
<div class="content">
<ul><li>记录<%=i+1%></li>
  <li>留言人:<%=aResults(1,i)%></li>
  <li>内容:<%=aResults(2,i)%></li>
  <li>时间:<%=aResults(3,i)%></li>
  <li>IP:<%=aResults(5,i)%></li>
</ul>
</div>
<%
Next
If numb>pagesize Then
fenye="<a href=search.asp?page=1>首页</a>  "
fenye=fenye&"<a href=search.asp?page="&epage-1&" title="&epage-1&">前页</a>  "
fenye=fenye&"<a href=search.asp?page="&epage+1&" title="&epage+1&">后页</a>  "
fenye=fenye&"<a href=search.asp?page="&pagecount&">末页</a>  "
fenye=fenye&"<BR>"
fenye=fenye&"总页数"&pagecount&",当前页"&epage&",总记录为:"&numb
response.write fenye
End if
%>
</body>
</html>

总结:本人认为以上代码除了初次查询需要连接到数据库外,其他时间都不需要连接数据库,对于大型数据查询或连接人数比较多的时候对资源节省还是很有用处理的!另外将查询数组保存在application对象上,还可以根据application( "data")("username")来判断某人查询过什么,不过此代码为初次模型,还有待今后大家一起努力改进!希望大家都顶力关注支持,谢谢!

测试代码下载