手机
当前位置:查字典教程网 >编程开发 >ASP教程 >asp中"无限流"分页程序代码
asp中"无限流"分页程序代码
摘要:第一种分页'首先判断页总数不为1和01then%>首页][上一页][下一页][尾页][首页][上一页][下一页][尾页][首页][上一页][...

<%

'******************************************************************

'**本程序名:"无限流"分页程序

'**作者:Arbiter(AAsx)

'**版本:MillionLevel

'**

'**QQ:22222xx

'**Email:Arbiter@21cn.com

'**http://www.imagecity.org/

'******************************************************************

'**

'**【作者的话】

'**

'**分页程序无疑是许多网络程序功能中一个比较麻烦的东西,事实上现在

'**为止绝大部分人还是在使用传统的分页方法(Rs.PageSize=xx),而了解

'**数据库操作的人都知道,这种传统方式有个弊端:第一次打开页面时,

'**它会预读所有的记录集,这当在数据大的时候,这将是致命的,而且接

'**下来的翻页速度也会非常慢,很占用资源。对于十万数量级以上的数据

'**库这种传统分页方式已经显得非常无力,更别说百万级了(根本没法操

'**作)。基于这种原因,促使我做了本程序。

'**

'**【程序功能】

'**

'**针对大型的数据库进行分页操作,理想的可操作的数据记录量在200万

'**以内(MaxLevel版将无数量限制,且无论数据库多大,翻页速度都是

'**不变),这是MillionLevel版分页程序在赛扬1G、内存512、win2k环

'**境下的测试数据:

'**

'**SQLserver2k+10万条记录+每页显示20条:

'**平均翻页速度:45ms

'**SQLserver2k+100万条记录+每页显示20条:

'**平均翻页速度:350ms

'**

'**

'**【分页原理】

'**

'**本程序不再使用Rs.PageSize的方式分页,连接数据库的游标类型

'**也不是使用conn,1,x,而是conn,0,1,这应是最快的游标类型了,不要

'**以为这样会使程序变得复杂,相反,程序非常简单,如果你看不明白,

'**应该是我的编程风格你不习惯,而非程序复杂。

'**"无限流"分页的中心是:每页只读出需要显示的记录,不再象传统

'**分页程序预读全部的数据,这正在本程序最大的优点--占用资源少,同

'**理速度也得到非常大的提升,特别在数据量越大的时候,它的速度优势

'**越明显(100万记录才350ms左右)。

'**当程序执行后,使用CurcorBegin和CurcorEnd记录显示的第一条记

'**录和最后一条记录的ID值,作为下一次翻页的标记,然后利用Topxx取

'**出需要的数据显示,同时又再对ID值进行记录。

'**

'**【结言】

'**

'**本程序为共享版,提供给各程序爱好者研究使用,若要转载、散播、修

'**改或作其他用途,请尊重作者的辛劳,注明出处。

'**如果本程序中有错漏、非最优化等缺点,请到www.csdn.net的Web开发/

'**ASP栏目中发表讨论,为了中国软件事业的发展,请不要固步自封:)

'**

'********************************************************************

OptionExplicit

'Response.Flush

DimBeginTime,EndTime

BeginTime=Timer

Dimconn,SQLstr,Rs,DefRecordNum,CursorBegin,CursorEnd,CurPageNum,hav

DefRecordNum=20

'--------------获取相关参数----------

IfRequest("CursorBegin")=""ThenCursorBegin=0ElseCursorBegin=Request("CursorBegin")

IfRequest("CursorEnd")=""ThenCursorEnd=0ElseCursorEnd=Request("CursorEnd")

IfRequest("CurPageNum")<>""Then

CurPageNum=CLng(Request("CurPageNum"))

IfCurPageNum<=0ThenCurPageNum=1

Else

CurPageNum=1

EndIf

hav=Request("hav")

Ifhav=""Thenhav="next"

'----------------End-----------------

'------------显示翻页内容函数--------

FunctionTurnPageFS(DispRecordNum)

Dimn

WhileNot(Rs.Eof)Andn<DispRecordNum

n=n+1

Response.Write"<tr>"&_

"<tdbgcolor='efefef'>"&Rs(0)&"</td>"&_

"<tdbgcolor='efefef'>"&Rs(1)&"</td>"&_

"<tdbgcolor='efefef'>"&Rs(2)&"</td>"&_

"<tdbgcolor='efefef'>"&Rs(3)&"</td>"&_

"<tdbgcolor='efefef'>"&Rs(4)&"</td>"&_

"<tdbgcolor='efefef'>"&Rs(5)&"</td>"&_

"</tr>"

Ifn=1ThenCursorBegin=Rs(0)

Ifn=DefRecordNumorRs.EofThenCursorEnd=Rs(0)

Rs.MoveNext

Wend

EndFunction

'-------------连接数据库-------------

Setconn=Server.CreateObject("Adodb.Connection")

'SQLstr="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="&Server.Mappath("mldata.mdb")

SQLstr="Driver={SQLServer};server=arbiter;uid=arbiter;pwd=123456;database=mldata"

conn.OpenSQLstr

'---------统计总记录数/总页数---------

'-PS:推荐使用count(ID),ID为自动编号且索引,否则速度有可能大打折扣

'-PS:此统计是本程序中最耗资源的一部分,如果取消这段程序,速度会快上10倍左右

DimTotalRecords,TotalPages

SQLstr="Selectcount(ID)AsRecordSumFromABC"

SetRs=conn.Execute(SQLstr,0,1)

TotalRecords=Rs("RecordSum")

TotalPages=Abs(Int(TotalRecords/DefRecordNum*(-1)))

Rs.Close

SetRs=Nothing

'--------根据hav选择相应的SQL字串-----

SelectCase(hav)

Case"back"

CursorEnd=CursorBegin

SQLstr="SelectTop"&DefRecordNum&"_

ID,Title,FileName,K,ImgSize,NameSon_

FromABCWhereID<"&CursorBegin&_

"AndIDIn(SelectTop"&DefRecordNum_

&"IDFromABCWhereID<"&CursorBegin_

&"orderbyIDDESC)orderbyID"

Case"next"

SQLstr="SelectTop"&DefRecordNum_

&"ID,Title,FileName,K,ImgSize,NameSonFromABCWhereID>"&CursorEnd&_

"orderbyID"

EndSelect

SetRs=conn.Execute(SQLstr,0,1)

%>

<html>

<head>

<title>"无限流"分页程序作者:Arbiter</title>

<metahttp-equiv="Content-Type"content="text/html;charset=gb2312">

<styletype="text/css">td,br,div,p,body{font-size:12px}</style>

</head>

<bodybgcolor="#FFFFFF"leftmargin="0"topmargin="0">

<tablewidth="100%"border="0"cellspacing="0"cellpadding="3"bgcolor="#E2F5FE">

<tralign="center">

<tdcolspan="2"><%Response.WriteCurPageNum&"/"&TotalPages&"页总记录数:"&TotalRecords%></td>

<td><ahref="mllist.asp">首页</a><ahref=javascript:turnpage('back');>上一页</a>

<ahref=javascript:turnpage('next');>下一页</a></td>

</tr>

</table>

<tablewidth="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

SetRs=Nothing

conn.Close

Setconn=Nothing

%>

</table>

<tablewidth="100%"border="0"cellspacing="0"cellpadding="3"bgcolor="#E2F5FE">

<tralign="center">

<tdcolspan="2"><%Response.WriteCurPageNum&"/"&TotalPages&"页总记录数:"&TotalRecords%></td>

<td><ahref="mllist.asp">首页</a><ahref=javascript:turnpage('back');>上一页</a>

<ahref=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>"

%>

<scriptlanguage="javascript">

functionturnpage(func){

varCurPageNum=<%=CurPageNum%>;//取得当前页码

varCursorBegin=<%=CursorBegin%>;//取得第一个显示的记录的ID值

varCursorEnd=<%=CursorEnd%>;//取得最后一个显示的记录的ID值

varTotalPages=<%=TotalPages%>;//取得页面总数

varBackUrl='mllist.asp?CurPageNum='+(CurPageNum-1)+'&CursorBegin='+CursorBegin+'&CursorEnd='+CursorEnd+'&hav=back';

varNextUrl='mllist.

asp?CurPageNum='+(CurPageNum+1)+'&CursorBegin='+CursorBegin+'&CursorEnd='+CursorEnd+'&hav=next';

if(CurPageNum<=1&&func=='back'){

location.href='#';

}elseif(CurPageNum>=TotalPages&&func=='next'){

location.href='#';

}elseif(func=='back'){

location.href=BackUrl;

}elseif(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='#';

}elseif(CurPageNum>=TotalPages&&func=='next'){

location.href='#';

}elseif(func=='back'){

location.href=BackUrl;

}elseif(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'每页显示记录数

ifNotIsEmpty(trim(Request("Page")))then'如果PAGE已经初始化...

Page=CInt(Request("Page"))'接收PAGE并化为数字型赋给PAGE变量

ifPage>rs.PageCountthen'如果接收的页数大于总页数

rs.AbsolutePage=rs.PageCount'设置当前显示页等于最后页

elseifPage<=0then'如果page小于等于0

Page=1'设置PAGE等于第一页

else

rs.AbsolutePage=Page'如果大于零,显示当前页等于接收的页数

endif

Endif

Page=rs.AbsolutePage%>

第一种分页

<%ifrs.pagecount<>1andrs.pagecount<>0then%>'首先判断页总数不为1和0

<%ifpage>1then%>

<%ifpage<rs.pagecountthen%>

[<aHref="<%=filepath%>?Page=<%=1%>">首页</a>]

[<aHref="<%=filepath%>?Page=<%=page-1%>">上一页</a>]

[<aHref="<%=filepath%>?Page=<%=page+1%>">下一页</a>]

[<aHref="<%=filepath%>?Page=<%=rs.PageCount%>">尾页</a>]

<%else%>

[<aHref="<%=filepath%>?Page=<%=1%>">首页</a>]

[<aHref="<%=filepath%>?Page=<%=page-1%>">上一页</a>]

[下一页][尾页]

<%endif%>

<%else%>

[首页][上一页]

[<aHref="<%=filepath%>?Page=<%=page+1%>">下一页</a>]

[<aHref="<%=filepath%>?Page=<%=rs.PageCount%>">尾页</a>]

<%endif%>

<%else%>

[首页][上一页][下一页][尾页]

<%endif%>

第二种分页

<%ifrs.pagecount<>1andrs.pagecount<>0then%>

<%ifpage>1then%>

[<aHref="<%=filepath%>?Page=<%=1%>">首页</a>]

[<aHref="<%=filepath%>?Page=<%=page-1%>">上一页</a>]

<%ifpage<rs.pagecountthen%>

[<aHref="<%=filepath%>?Page=<%=page+1%>">下一页</a>]

[<aHref="<%=filepath%>?Page=<%=rs.PageCount%>">尾页</a>]

<%else%>

[下一页][尾页]

<%endif%>

<%else%>

[首页][上一页]

[<aHref="<%=filepath%>?Page=<%=page+1%>">下一页</a>]

[<aHref="<%=filepath%>?Page=<%=rs.PageCount%>">尾页</a>]

<%endif%>

<%else%>

[首页][上一页][下一页][尾页]

<%endif%>

第三种

<%ifrs.pagecount<>1andrs.pagecount<>0then%>

<%ifpage<rs.pagecountthen%>

<%ifpage=1then%>

[首页][上一页]

<%else%>

[<aHref="<%=filepath%>?Page=<%=1%>">首页</a>]

[<aHref="<%=filepath%>?Page=<%=page-1%>">上一页</a>]

<%endif%>

[<aHref="<%=filepath%>?Page=<%=page+1%>">下一页</a>]

[<aHref="<%=filepath%>?Page=<%=rs.PageCount%>">尾页</a>]

<%else%>

[<aHref="<%=filepath%>?Page=<%=1%>">首页</a>]

[<aHref="<%=filepath%>?Page=<%=page-1%>">上一页</a>]

[下一页][尾页]

<%endif%>

<%else%>

[首页][上一页][下一页][尾页]

<%endif%>

【asp中"无限流"分页程序代码】相关文章:

asp中正则表达式过滤html代码函数

asp中实现随机分组程序的代码

在asp中通过vbs类实现rsa加密与解密的代码

asp中COM组件中如何连接数据库的代码

文章内页类

asp无限分级(递归调用)

ASP无组件分页实现思路及代码

在asp中通过getrows实现数据库记录分页的一段代码

asp制作的日历程序

asp防止刷新功能实现代码

精品推荐
分类导航