ASP分页代码大型数据库的.docx

上传人:b****3 文档编号:4636842 上传时间:2023-05-07 格式:DOCX 页数:41 大小:31.89KB
下载 相关 举报
ASP分页代码大型数据库的.docx_第1页
第1页 / 共41页
ASP分页代码大型数据库的.docx_第2页
第2页 / 共41页
ASP分页代码大型数据库的.docx_第3页
第3页 / 共41页
ASP分页代码大型数据库的.docx_第4页
第4页 / 共41页
ASP分页代码大型数据库的.docx_第5页
第5页 / 共41页
ASP分页代码大型数据库的.docx_第6页
第6页 / 共41页
ASP分页代码大型数据库的.docx_第7页
第7页 / 共41页
ASP分页代码大型数据库的.docx_第8页
第8页 / 共41页
ASP分页代码大型数据库的.docx_第9页
第9页 / 共41页
ASP分页代码大型数据库的.docx_第10页
第10页 / 共41页
ASP分页代码大型数据库的.docx_第11页
第11页 / 共41页
ASP分页代码大型数据库的.docx_第12页
第12页 / 共41页
ASP分页代码大型数据库的.docx_第13页
第13页 / 共41页
ASP分页代码大型数据库的.docx_第14页
第14页 / 共41页
ASP分页代码大型数据库的.docx_第15页
第15页 / 共41页
ASP分页代码大型数据库的.docx_第16页
第16页 / 共41页
ASP分页代码大型数据库的.docx_第17页
第17页 / 共41页
ASP分页代码大型数据库的.docx_第18页
第18页 / 共41页
ASP分页代码大型数据库的.docx_第19页
第19页 / 共41页
ASP分页代码大型数据库的.docx_第20页
第20页 / 共41页
亲,该文档总共41页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

ASP分页代码大型数据库的.docx

《ASP分页代码大型数据库的.docx》由会员分享,可在线阅读,更多相关《ASP分页代码大型数据库的.docx(41页珍藏版)》请在冰点文库上搜索。

ASP分页代码大型数据库的.docx

ASP分页代码大型数据库的

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

'**本程序名:

"无限流"分页程序

'**作者:

Arbiter(AAsx)

'**版本:

MillionLevel

'**

'**QQ:

22222xx

'**Email:

Arbiter@

'**http:

//www.imagecity.org/

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

'**

'**【作者的话】

'**

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

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

'**数据库操作的人都知道,这种传统方式有个弊端:

第一次打开页面时,

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

'**下来的翻页速度也会非常慢,很占用资源。

对于十万数量级以上的数据

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

'**作)。

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

'**

'**【程序功能】

'**

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

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

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

'**境下的测试数据:

'**

'**SQLserver2k10万条记录每页显示20条:

'**平均翻页速度:

45ms

'**SQLserver2k100万条记录每页显示20条:

'**平均翻页速度:

350ms

'**

'**

'**【分页原理】

'**

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

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

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

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

'**"无限流"分页的中心是:

每页只读出需要显示的记录,不再象传统

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

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

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

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

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

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

'**

'**【结言】

'**

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

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

'**如果本程序中有错漏、非最优化等缺点,请到的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

n=n1

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)

%>

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

td,br,div,p,body{font-size:

12px}

<%Response.WriteCurPageNum&"/"&TotalPages&"页总记录数:

"&TotalRecords%>

首页

turnpage('back');>上一页

turnpage('next');>下一页

ID

Title

FileName

大小

尺寸

类别

<%

TurnPageFS(DefRecordNum)

Rs.Close

SetRs=Nothing

conn.Close

Setconn=Nothing

%>

<%Response.WriteCurPageNum&"/"&TotalPages&"页总记录数:

"&TotalRecords%>

首页

turnpage('back');>上一页

turnpage('next');>下一页

<%

EndTime=Timer

Response.Write"
程序执行时间:

"&(EndTime-BeginTime)*1000&"毫秒"

Response.Write"第一条记录的ID值(CursorBegin)="&CursorBegin&""

Response.Write"最后一条记录的ID值(CursorEnd)="&CursorEnd&"

"

%>

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='(CurPageNum1)'&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;

}

}

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

[?

Page=<%=1%>">首页]

[?

Page=<%=page-1%>">上一页]

[?

Page=<%=page1%>">下一页]

[?

Page=<%=rs.PageCount%>">尾页]

<%else%>

[?

Page=<%=1%>">首页]

[?

Page=<%=page-1%>">上一页]

[下一页][尾页]

<%endif%>

<%else%>

[首页][上一页]

[?

Page=<%=page1%>">下一页]

[?

Page=<%=rs.PageCount%>">尾页]

<%endif%>

<%else%>

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

<%endif%>

 

第二种分页

 

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

<%ifpage>1then%>

[?

Page=<%=1%>">首页]

[?

Page=<%=page-1%>">上一页]

<%ifpage

[?

Page=<%=page1%>">下一页]

[?

Page=<%=rs.PageCount%>">尾页]

<%else%>

[下一页][尾页]

<%endif%>

<%else%>

[首页][上一页]

[?

Page=<%=page1%>">下一页]

[?

Page=<%=rs.PageCount%>">尾页]

<%endif%>

<%else%>

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

<%endif%>

第三种

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

<%ifpage

<%ifpage=1then%>

[首页][上一页]

<%else%>

[?

Page=<%=1%>">首页]

[?

Page=<%=page-1%>">上一页]

<%endif%>

[?

Page=<%=page1%>">下一页]

[?

Page=<%=rs.PageCount%>">尾页]

<%else%>

[?

Page=<%=1%>">首页]

[?

Page=<%=page-1%>">上一页]

[下一页][尾页]

<%endif%>

<%else%>

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

<%endif%>

------------------------ASP中实现分页显示的七种武器-------------------------->

在微软的ASP编程体系中,ADO对象的建立,使得从网页访问数据库成为一件易事,特别是ADO的Recordset对象使得控制数据的输出显示更为方便、自由。

而在VisualInterDev6.0(以下简称VI6.0)中,由于ScriptObjectModel(以下简称SOM)、Design-TimeControl(以下简称DTC)以及DataEnvironmentObjectModel(以下简称DEOM)等对象模型的引入,使网页对数据库的访问设计显得更为方便。

  因为主题方面的原因,关于数据库的连接,下文只给出代码和简要注释,而把重点放在如何利用Recordset对象(或控件)实现数据记录的分页显示方面。

根据我的理解,分页显示的关键就在于对ADO的Recordset对象或DTC(设计时控件)的Recordset控件的属性和方法的熟练把握上。

  这七种分页显示的武器概括起来说分四类:

  第一、二种我暂取名叫“纯ASP法”,这也是国内的ASP网站上用得最多的方法,它们的区别仅在实现技巧的不同。

这两种方法的实现最易理解,用到的对象概念也最少,对开发环境的要求也最低(只要记事本就行)。

可以说,这两种方法的实质还是CGI的编程思想,只是在程序中引入了ADO对象而已。

  第四、五种暂取名叫“SOM的DHTML法”。

这两种方法要求在VI6.0的环境下,利用微软提出的脚本对象模型(ScriptObjectModel)和DHTML中Table对象的与数据库绑定的新特性(许多书和文章只介绍了DHTML的CSS特性在样式设计中的运用而忽略介绍其数据绑定特性),实现在客户端控制翻页。

但它要求用户的浏览器必须是支持DHTML,如:

MicrosoftInternetExplorer4.0及以上的版本。

  第六种暂取名叫“SOM服务器端法”。

要求在VI6.0的环境下开发,它利用微软提出的脚本对象模型(ScriptObjectModel)中的几个DTC控件:

Recordset、PageObject、Grid等在服务器端(客户端)实现翻页控制。

这是一种激动人心的、全新的编程方法,它把网页看成对象(这种对象模型和传统的DOM----documentobjectmodel是有区别的:

DOM只能控制客户端,而SOM可控制服务器端和客户端),它真正实现了网页的面向对象编程。

但遗憾的是,也许是我个人能力有限,这种技术我个人认为还不是很成熟,比如,与浏览器的结合还不是很好,这将在后文详细说明。

  第七种暂取名叫“DEOM法”。

它也是利用了VI6.0中建立的数据环境对象模型(DataEnvironmentObjectModel)建立Recordset对象。

这也是在网页编程上比较少见的新方法,与SOM模型相比,自有它的优点,这将在后文详述。

  在后面所举的所有例子源代码,都可以直接拷贝使用,你甚至可以不懂其原理,只要把其中的粗斜体字部分换成相应自己的数据库名或字段名就可以了。

  在开始详细介绍各种分页方法前,让我们先创建一个数据库:

用Office97中的access自创一个Employee.mdb,其中建一个表emp,只设三个字段:

empID,lastname和firstname。

为什么这么简单,是因为我们关心的是怎样处理recordset的结果。

  第一种:

参数直接代入法

  这种方法是用手工建立Recordset对象,利用其pagesize(每页指定显示记录数),pagecount(总页码数)和absolutepage(当前页码数)属性来控制分页的输出。

分页采用<href>直接带页码参数的方法来控制翻页。

网页的名字为emp1.asp。

源代码如下:

 

<%//建立与employee.mdb数据库的连

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2