来自CSDN的"无限流"分页程序
来自CSDN的"无限流"分页程序
发布时间:2016-12-29 来源:查字典编辑
摘要:以下是代码片段:'*************************************************************...

以下是代码片段:

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

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

'**作者: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)Andnn=n+1

Response.Write""&_

""&Rs(0)&""&_

""&Rs(1)&""&_

""&Rs(2)&""&_

""&Rs(3)&""&_

""&Rs(4)&""&_

""&Rs(5)&""&_

""

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)

%>

td,br,div,p,body{font-size:12px}

首页上一页

下一页

ID

Title

FileName

大小

尺寸

类别

首页上一页下一页

functionturnpage(func){

varCurPageNum=;//取得当前页码

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

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

varTotalPages=;//取得页面总数

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;

}

}

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新网页播放器学习
热门网页播放器学习
编程开发子分类