当前位置: 首页 > 图文教程 > 网络编程 > ASP > asp中"无限流"分页程序代码

ASP
asp生成三维饼图的函数
ASP下的简洁的多重查询的方法与函数 真不错
发一个ASP的ADODB类代码
A利用ASP小偷和Google实现在线翻译功能的代码
ASP类型网站结合动网论坛会员的方法
Asp下实现多表单域无组件文件上传的实例
asp制作中常用到的函数库集合
易心asp分页类 v1.0
asp中xmlhttp组件发包
检测是否为数字类型的asp代码
可以获得文件的文件名的asp函数
用asp实现访问远程计算机上MDB access数据库文件的方法
用ASP实现写IIS日志的代码
asp在IE浏览器中下载服务端上的各类文件的实现方法
asp汉字中文图片验证码的实现代码
asp WAP获取手机终端信息的一段代码
asp取得数组中的最大值的方法
用asp实现的截取指定格式字符串的代码
asp jmail发邮件 详细解析
ASP编程中连接数据库和数据库操作的常用代码

ASP 中的 asp中"无限流"分页程序代码


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

<%
'******************************************************************
'** 本程序名:"无限流"分页程序
'** 作者:Arbiter(AAsx)
'** 版本:Million Level
'**
'** QQ:22222xx
'** Email:[email protected]
'** http://www.imagecity.org/
'******************************************************************
'**
'** 【作者的话】
'**
'** 分页程序无疑是许多网络程序功能中一个比较麻烦的东西,事实上现在
'** 为止绝大部分人还是在使用传统的分页方法(Rs.PageSize=xx),而了解
'** 数据库操作的人都知道,这种传统方式有个弊端:第一次打开页面时,
'** 它会预读所有的记录集,这当在数据大的时候,这将是致命的,而且接
'** 下来的翻页速度也会非常慢,很占用资源。对于十万数量级以上的数据
'** 库这种传统分页方式已经显得非常无力,更别说百万级了(根本没法操
'** 作)。基于这种原因,促使我做了本程序。
'**
'** 【程序功能】
'**
'** 针对大型的数据库进行分页操作,理想的可操作的数据记录量在200万
'** 以内(Max Level版将无数量限制,且无论数据库多大,翻页速度都是
'** 不变),这是Million Level版分页程序在赛扬1G、内存512、win2k环
'** 境下的测试数据:
'**
'** SQLserver 2k + 10万条记录 + 每页显示20条:
'** 平均翻页速度:45ms
'** SQLserver 2k + 100万条记录 + 每页显示20条:
'** 平均翻页速度:350ms
'**
'**
'** 【分页原理】
'**
'** 本程序不再使用Rs.PageSize的方式分页,连接数据库的游标类型
'** 也不是使用conn,1,x,而是conn,0,1,这应是最快的游标类型了,不要
'** 以为这样会使程序变得复杂,相反,程序非常简单,如果你看不明白,
'** 应该是我的编程风格你不习惯,而非程序复杂。
'** "无限流"分页的中心是:每页只读出需要显示的记录,不再象传统
'** 分页程序预读全部的数据,这正在本程序最大的优点--占用资源少,同
'** 理速度也得到非常大的提升,特别在数据量越大的时候,它的速度优势
'** 越明显(100万记录才350ms左右)。
'** 当程序执行后,使用CurcorBegin和CurcorEnd记录显示的第一条记
'** 录和最后一条记录的ID值,作为下一次翻页的标记,然后利用Top xx取
'** 出需要的数据显示,同时又再对ID值进行记录。
'**
'** 【结 言】
'**
'** 本程序为共享版,提供给各程序爱好者研究使用,若要转载、散播、修
'** 改或作其他用途,请尊重作者的辛劳,注明出处。
'** 如果本程序中有错漏、非最优化等缺点,请到www.csdn.net的Web开发/
'** ASP栏目中发表讨论,为了中国软件事业的发展,请不要固步自封:)
'**
'********************************************************************
Option Explicit
'Response.Flush
Dim BeginTime,EndTime
BeginTime=Timer
Dim conn,SQLstr,Rs,DefRecordNum,CursorBegin,CursorEnd,CurPageNum,hav
DefRecordNum=20
'--------------获取相关参数----------
If Request("CursorBegin")="" Then CursorBegin=0 Else CursorBegin=Request("CursorBegin")
If Request("CursorEnd")="" Then CursorEnd=0 Else CursorEnd=Request("CursorEnd")
If Request("CurPageNum")<>"" Then
CurPageNum=CLng(Request("CurPageNum"))
If CurPageNum<=0 Then CurPageNum=1
Else
CurPageNum=1
End If
hav=Request("hav")
If hav="" Then hav="next"
'----------------End-----------------
'------------显示翻页内容函数--------
Function TurnPageFS(DispRecordNum)
Dim n
While Not(Rs.Eof) And n<DispRecordNum
n=n+1
Response.Write "<tr>"&_
"<td bgcolor='efefef'>"&Rs(0)&"</td>"&_
"<td bgcolor='efefef'>"&Rs(1)&"</td>"&_
"<td bgcolor='efefef'>"&Rs(2)&"</td>"&_
"<td bgcolor='efefef'>"&Rs(3)&"</td>"&_
"<td bgcolor='efefef'>"&Rs(4)&"</td>"&_
"<td bgcolor='efefef'>"&Rs(5)&"</td>"&_
"</tr>"
If n=1 Then CursorBegin=Rs(0)
If n=DefRecordNum or Rs.Eof Then CursorEnd=Rs(0)
Rs.MoveNext
Wend
End Function
'-------------连接数据库-------------
Set conn=Server.CreateObject("Adodb.Connection")
'SQLstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.Mappath("mldata.mdb")
SQLstr="Driver={SQL Server};server=arbiter;uid=arbiter;pwd=123456;database=mldata"
conn.Open SQLstr
'---------统计总记录数/总页数---------
'-PS:推荐使用count(ID),ID为自动编号且索引,否则速度有可能大打折扣
'-PS:此统计是本程序中最耗资源的一部分,如果取消这段程序,速度会快上10倍左右
Dim TotalRecords,TotalPages
SQLstr="Select count(ID) As RecordSum From ABC"
Set Rs=conn.Execute(SQLstr,0,1)
TotalRecords=Rs("RecordSum")
TotalPages=Abs(Int(TotalRecords/DefRecordNum*(-1)))
Rs.Close
Set Rs=Nothing
'--------根据hav选择相应的SQL字串-----
Select Case(hav)
Case "back"
CursorEnd=CursorBegin
SQLstr="Select Top "&DefRecordNum&"_
ID,Title,FileName,K,ImgSize,NameSon _
From ABC Where ID<"&CursorBegin&_
" And ID In (Select Top "&DefRecordNum_
&" ID From ABC Where ID<"&CursorBegin_
&" order by ID DESC) order by ID"
Case "next"
SQLstr="Select Top "&DefRecordNum_
&" ID,Title,FileName,K,ImgSize,NameSon From ABC Where ID>"&CursorEnd&_
" order by ID"
End Select
Set Rs=conn.Execute(SQLstr,0,1)
%>
<html>
<head>
<title>"无限流"分页程序  作者:Arbiter</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style type="text/css">td,br,div,p,body {font-size:12px}</style>
</head>
<body bgcolor="#FFFFFF" leftmargin="0" topmargin="0">
<table width="100%" border="0" cellspacing="0" cellpadding="3" bgcolor="#E2F5FE">
<tr align="center">
<td colspan="2"><%Response.Write CurPageNum&"/"&TotalPages&"页 总记录数:"&TotalRecords%></td>
<td><a href="mllist.asp">首页</a> <a href=javascript:turnpage('back');>上一页</a>
<a href=javascript:turnpage('next');>下一页</a> </td>
</tr>
</table>
<table width="100%" border="1" cellspacing="0" cellpadding="3" bgcolor="#CCCCCC">
<tr>
<td>ID</td>
<td>Title</td>
<td>FileName</td>
<td>大小</td>
<td>尺寸</td>
<td>类别</td>
</tr>
<%
TurnPageFS(DefRecordNum)
Rs.Close
Set Rs=Nothing
conn.Close
Set conn=Nothing
%>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="3" bgcolor="#E2F5FE">
<tr align="center">
<td colspan="2"><%Response.Write CurPageNum&"/"&TotalPages&"页 总记录数:"&TotalRecords%></td>
<td><a href="mllist.asp">首页</a> <a href=javascript:turnpage('back');>上一页</a>
<a href=javascript:turnpage('next');>下一页</a> </td>
</tr>
</table>
<%
EndTime=Timer
Response.Write "<br>程序执行时间:"&(EndTime-BeginTime)*1000&"毫秒"
Response.Write " 第一条记录的ID值(CursorBegin)="&CursorBegin&" "
Response.Write "最后一条记录的ID值(CursorEnd)="&CursorEnd&"<br><br>"
%>
<script language="javascript">
function turnpage(func){
var CurPageNum=<%=CurPageNum%>; //取得当前页码
var CursorBegin=<%=CursorBegin%>; //取得第一个显示的记录的ID值
var CursorEnd=<%=CursorEnd%>; //取得最后一个显示的记录的ID值
var TotalPages=<%=TotalPages%>; //取得页面总数
var BackUrl='mllist.asp?CurPageNum='+(CurPageNum-1)+'&CursorBegin='+CursorBegin+'&CursorEnd='+CursorEnd+'&hav=back';
var NextUrl='mllist.
asp?CurPageNum='+(CurPageNum+1)+'&CursorBegin='+CursorBegin+'&CursorEnd='+CursorEnd+'&hav=next';
if(CurPageNum<=1 && func=='back'){
location.href='#';
}else if(CurPageNum>=TotalPages && func=='next'){
location.href='#';
}else if(func=='back'){
location.href=BackUrl;
}else if(func='next'){
location.href=NextUrl;
}
}
</script>
</body>
</html>
asp?CurPageNum='+(CurPageNum+1)+'&CursorBegin='+CursorBegin+'&CursorEnd='+CursorEnd+'&hav=next';
if(CurPageNum<=1 && func=='back'){
location.href='#';
}else if(CurPageNum>=TotalPages && func=='next'){
location.href='#';
}else if(func=='back'){
location.href=BackUrl;
}else if(func='next'){
location.href=NextUrl;
}
}
</script>
</body>
</html>
Cnbruce的代码:
分页样例:[首页] [上页] [下页] [尾页] [页次:4/5页] [共86篇 20篇/页] 转到:_ 页
以下为公用代码,必须具备。
<%filepath=request.servervariables("path_info")%>
<%page=1 '设置变量初始值PAGE=1
page=request.querystring("page") 'page值为接受值
rs.PageSize = 20 '每页显示记录数
if Not IsEmpty(trim(Request("Page"))) then '如果PAGE已经初始化...
Page = CInt(Request("Page")) '接收PAGE并化为数字型赋给PAGE变量
if Page > rs.PageCount then '如果接收的页数大于总页数
rs.AbsolutePage = rs.PageCount '设置当前显示页等于最后页
elseif Page <= 0 then '如果page小于等于0
Page = 1 '设置PAGE等于第一页
else
rs.AbsolutePage = Page '如果大于零,显示当前页等于接收的页数
end if
End if
Page = rs.AbsolutePage%>
第一种分页
<%if rs.pagecount<>1 and rs.pagecount<>0 then%>'首先判断页总数不为1和0
<%if page>1 then%>
<%if page<rs.pagecount then %>
[<a Href="<%=filepath%>?Page=<% = 1%>">首页</a>]
[<a Href="<%=filepath%>?Page=<% = page -1 %>">上一页</a>]
[<a Href="<%=filepath%>?Page=<% = page + 1%>">下一页</a>]
[<a Href="<%=filepath%>?Page=<% = rs.PageCount%>">尾页</a>]
<%else%>
[<a Href="<%=filepath%>?Page=<% = 1%>">首页</a>]
[<a Href="<%=filepath%>?Page=<% = page -1 %>">上一页</a>]
[下一页] [尾页]
<% end if %>
<%else%>
[首页] [上一页]
[<a Href="<%=filepath%>?Page=<% = page + 1%>">下一页</a>]
[<a Href="<%=filepath%>?Page=<% = rs.PageCount%>">尾页</a>]
<%end if %>
<%else%>
[首页] [上一页] [下一页] [尾页]
<%end if%>
第二种分页
<%if rs.pagecount<>1 and rs.pagecount<>0 then%>
<%if page>1 then%>
[<a Href="<%=filepath%>?Page=<% = 1%>">首页</a>]
[<a Href="<%=filepath%>?Page=<% = page -1 %>">上一页</a>]
<%if page<rs.pagecount then %>
[<a Href="<%=filepath%>?Page=<% = page + 1%>">下一页</a>]
[<a Href="<%=filepath%>?Page=<% = rs.PageCount%>">尾页</a>]
<%else%>
[下一页] [尾页]
<% end if %>
<%else%>
[首页] [上一页]
[<a Href="<%=filepath%>?Page=<% = page + 1%>">下一页</a>]
[<a Href="<%=filepath%>?Page=<% = rs.PageCount%>">尾页</a>]
<%end if %>
<%else%>
[首页] [上一页] [下一页] [尾页]
<%end if%>
第三种
<%if rs.pagecount<>1 and rs.pagecount<>0 then%>
<%if page<rs.pagecount then%>
<%if page=1 then %>
[首页] [上一页]
<%else%>
[<a Href="<%=filepath%>?Page=<% = 1%>">首页</a>]
[<a Href="<%=filepath%>?Page=<% =page -1 %>">上一页</a>]
<% end if %>
[<a Href="<%=filepath%>?Page=<% = page + 1%>">下一页</a>]
[<a Href="<%=filepath%>?Page=<% = rs.PageCount%>">尾页</a>]
<%else%>
[<a Href="<%=filepath%>?Page=<% = 1%>">首页</a>]
[<a Href="<%=filepath%>?Page=<% =page -1 %>">上一页</a>]
[下一页] [尾页]
<%end if %>
<%else%>
[首页] [上一页] [下一页] [尾页]
<%end if%>