Access2000数据库80万记录一般快速分页类

代码经过优化和测试。


主要思想:一份统计(计数)的记录数(的RecordCount属性不在查询缓存),饼干,不需要再跳。统计页面跳转AbsolutePage属性可以使用ADO。为了方便课堂上的通话,讲解了当地的主要代码。


硬件环境:AMD Athlon XP 2600+,256 DDR

软件环境:微软视窗2000高级服务器+ IIS 5 +访问2000 + IE 6

测试结果:第一次运行在250(主页)- 400(最后一页)毫秒,(在记录号码缓存)后,页面之间的跳转稳定在47毫秒以下。第一页跳过最后一页,不超过350毫秒。


适用范围:用于普通分页。它并不适用于更复杂的查询:如果{标题}喜欢# 146是最重要的部分,占146 #是查询最喜欢的部分。查询时间大大增加。即使title字段被索引了,它也不起作用。


<

昏暗的intdatestart

intdatestart =定时器()


REM # #开放数据库连接

REM #################################################################

f__openconn()函数

昏暗的strdbpath

昏暗的connstr

strdbpath =分野说 /分贝。mdb

connstr =商=微软。飞机。OLEDB数据源= 4;

connstr = connstr server.mappath(strdbpath)

设置conn = server.createobject(数据连接)

conn.open connstr

端功能

REM #################################################################


REM # #关闭数据库连接

REM #################################################################

f__closeconn()函数

如果IsObject(CONN)然后

conn.close

最后如果

设置conn =没有

端功能

REM #################################################################

执行时间

REM #################################################################

功能gettimeover(iflag)

昏暗的ttimeover

如果iflag = 1

ttimeover = formatnumber(定时器()- intdatestart,6,真的)

gettimeover =执行时间:ttimeover二

其他的

ttimeover = formatnumber(((定时器()- intdatestart)* 1000, 3,真的)

gettimeover =执行时间:ttimeover毫秒

最后如果

端功能

REM #################################################################

类cls_pageview

私人sbooinitstate

私人sstrcookiesname

私人sstrpageurl

私人sstrpagevar

私人sstrtablename

私人sstrfieldslist

私人sstrcondiction

私人sstrorderlist

私人sstrprimarykey

私人sintrefresh


私人sintrecordcount

私人sintpagesize

私人sintpagenow

私人sintpagemax


私人sobjconn


私人sstrpageinfo


私有子class_initialize

打电话给ClearVars()

端子


私有子class_terminate()

集sobjconn =没有

端子


市民Sub ClearVars()

sbooinitstate = false

sstrcookiesname =

sstrpageurl =

sstrpagevar =页面

sstrtablename =

sstrfieldslist =

sstrcondiction =

sstrorderlist =

sstrprimarykey =

sintrefresh = 0


sintrecordcount = 0

sintpagesize = 0

sintpagenow = 0

sintpagemax = 0

端子


REM # #记录变量的饼干数量

公共财产让strcookiesname(价值)

sstrcookiesname =价值

最后的财产


REM # #地址

公共财产让strpageurl(价值)

sstrpageurl =价值

最后的财产


REM # #表名称

公共财产让strtablename(价值)

sstrtablename =价值

最后的财产


REM # #字段列表

公共财产让strfieldslist(价值)

sstrfieldslist =价值

最后的财产


REM # #查询

公共财产让strcondiction(价值)

如果值> 然后

sstrcondiction = ,价值

其他的

sstrcondiction =

最后如果

最后的财产


REM # #排序字段,如:{id} ASC,{ CreateDateTime } desc

公共财产让strorderlist(价值)

如果值> 然后

sstrorderlist =秩序价值

其他的

sstrorderlist =

最后如果

最后的财产


REM # #现场统计记录

公共财产让strprimarykey(价值)

sstrprimarykey =价值

最后的财产


每页显示的记录数# # REM

公共财产让intpagesize(价值)

sintpagesize = tonum(价值20)

最后的财产


REM # #数据库连接对象

公共财产让objconn(价值)

集sobjconn =价值

最后的财产


REM # #当前页

公共财产让intpagenow(价值)

sintpagenow = tonum(价值1)

最后的财产


REM # #页面参数

公共财产让strpagevar(价值)

sstrpagevar =价值

最后的财产


REM # #刷新。其他1个值不刷新、刷新

公共财产让intrefresh(价值)

sintrefresh = tonum(价值0)

最后的财产


REM # #从当前页

公共财产得到intpagenow()

IntPageNow = singPageNow

最后的财产


REM # #寻呼信息

公共财产得到strpageinfo()

strpageinfo = sstrpageinfo

最后的财产


REM # #取得记录集的二维数组或字符串,输出的周期必须用(ISArray)判断

公共财产得到arrrecordinfo()

如果不sbooinitstate然后

退出房地产

最后如果


模糊RS

SQL =选择sstrfieldslist _

sstrtablename _

sstrcondiction _

sstrorderlist


集= server.createobject(ADODB。记录集)

rs.open sql,sobjconn,1, 1

如果不是(rs.eof或rs.bof)然后

rs.pagesize = sintpagesize

rs.absolutepage = sintpagenow

如果不是(rs.eof或rs.bof)然后

arrrecordinfo = rs.getrows(sintpagesize)

其他的

arrrecordinfo =

最后如果

其他的

arrrecordinfo =

最后如果

关闭

设置=无

最后的财产


REM # #初始化记录数

Sub InitRecordCount(私人)

sintrecordcount = 0

如果不是(sbooinitstate)Exit Sub

昏暗的sinttmp

sinttmp = tonum(request.cookies(_xp_sstrcookiesname),1)

如果((sinttmp<0)或(sintrefresh = 1))然后

模糊sql

SQL =select count(sstrprimarykey)_

sstrtablename _

sstrcondiction

集= sobjconn.execute(SQL)

如果rs.eof或rs.bof然后

sinttmp = 0

其他的

sinttmp = RS(0)

最后如果

sintrecordcount = sinttmp


Response.Cookies (_xp_ sstrCookiesName) = sintTmp

其他的

sintrecordcount = sinttmp

最后如果

端子


REM # #初始寻呼信息

Sub InitPageInfo(私人)

sstrpageinfo =

如果不是(sbooinitstate)Exit Sub


昏暗的surl

surl = sstrpageurl

如果仪器(1,surl,

surl = surlquot;sstrpagevar=

其他的

surl = surl sstrpagevar

最后如果


如果sintpagenow 0然后sintpagenow = 1

如果sintrecordcount MOD sintpagesize = 0

sintpagemax = sintrecordcount sintpagesize

其他的

sintpagemax = sintrecordcount sintpagesize + 1

最后如果

如果sintpagenow sintpagemax然后sintpagenow > = sintpagemax


如果sintpagenow 1

sstrpageinfo =一页在首页

其他的

sstrpageinfo = sstrpageinfo主页

sstrpageinfo = sstrpageinfo 最后一页

最后如果


如果sintpagemax - sintpagenow<1

sstrpageinfo = sstrpageinfo下一页最后一页

其他的

sstrpageinfo = sstrpageinfo 下一页

sstrpageinfo = sstrpageinfo端

最后如果


sstrpageinfo =sstrpageinfo页:sintpagenow / sintpagemax

sstrpageinfo = sstrpageinfo 共同sintrecordcount栏记录sintpagesize栏/页

端子


REM # #长整数的转换

私有函数tonum(S,默认)

s

如果和ISNUMERIC<>(S)然后

tonum = CLNG(S)

其他的

tonum =默认

最后如果

端功能


REM # #类初始化

市民Sub InitClass()

sbooinitstate =真

如果不是(Object(sobjconn))然后sbooinitstate = false

打电话给InitRecordCount()

打电话给InitPageInfo()

端子

类的结束




昏暗的strlocalurl

strlocalurl = request.servervariables(script_name )


昏暗的intpagenow

intpagenow = request.querystring(页)


昏暗的intpagesize,strpageinfo

intpagesize = 30


昏暗的arrrecordinfo,我

朦胧的Conn

f__openconn

昏暗的clsrecordinfo

集clsrecordinfo =新cls_pageview


clsrecordinfo.strtablename ={一}

clsrecordinfo.strpageurl = strlocalurl

clsrecordinfo.strfieldslist ={id},{ AAAA },{ BBBB },{二}

clsrecordinfo.strcondiction ={id}<10000

clsrecordinfo.strorderlist ={id} ASC

clsrecordinfo.strprimarykey ={id}

clsrecordinfo.intpagesize = 20

clsrecordinfo.intpagenow = intpagenow


clsrecordinfo.strcookiesname =RecordCount

clsrecordinfo.strpagevar =页面


clsrecordinfo.intrefresh = 0

clsrecordinfo.objconn = Conn

clsrecordinfo.initclass


arrrecordinfo = clsrecordinfo.arrrecordinfo

strpageinfo = clsrecordinfo.strpageinfo

集clsrecordinfo =没有

f__closeconn

%>







分页测试



<!——

{。浏览量

字体大小:12px;

}

PageView TD {。

边框右侧样式:实心;

边框底部样式:实心;

颜色:# e0e0e0边境;

Border-bottom-color: #E0E0E0;

权利边界宽度:1px;

底部边框宽度:1px;

}

浏览量{表。

左边框样式:实心;

边框顶部样式:实心;

边框颜色:# e0e0e0;

边境上的颜色:# e0e0e0;

边境上1px宽度;

左边框宽度:1px;

}

治疗头{

背景:# eff7ff;

字体大小:14px;

字体粗细:粗体;

线高度:120%;

文本对齐:中心;

}

-->





<!——

{体

字体大小:12px;

}

答:链接{

颜色:# 993300;

文字装饰:无;

}

答:访问{

颜色:# 003366;

文字装饰:无;

}

答:悬停{

颜色:# 0066cc;

文字装饰:下划线;

}

答:活动{

颜色:# 000000;

文字装饰:无;

}

表{

字体大小:12px;

}

-->























身份证件

描述

日期,



<

如果IsArray(arrrecordinfo)然后

我= 0,UBound(arrrecordinfo,2)

%>











<

下一个

最后如果

%>