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)
%>
<
下一个
最后如果
%>