|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
Access是一种桌面数据库,只适合数据量少的应用,在处理少量数据和单机访问的数据库时是很好的,效率也很高。但是它的同时访问客户端不能多于4个。access数据库有一定的极限,如果数据达到100M左右,很容易造成服务器iis假死,或者消耗掉服务器的内存导致服务器崩溃。静态|分页|功能Fromcomputerworld
在ASP中改良静态分页的功能
国民银行济南分行整理中央张立锋
山东省水利迷信研讨院张禾
--------------------------------------------------------------------------------
概述
----如今有很多先容使用ASP完成静态分页的文章,办法迥然不同,就是每次使用ADO前往原始数据满意前提纪录会合的指定页。但在实践工程使用中,原始数据量一般很年夜,原始数据的加工对照慢,假如每次换页原始数据都要加工一次,则会严峻影呼应用程序运转的功能。
----办理上述成绩次要有两种路子:一种路子是将查询前提绝对流动,使用绝对流动的查询前提对原始数据举行加工,天生一个小数据量的两头库,每次查询都对两头库举行操纵。如许固然会进步程序的功能,但会影响程序的天真性,并且Server端还需准时对原始数据举行加工保护。另外一个路子是在Server端保留查询的了局。如许固然不克不及改良查询的功能,但Client端换页时Server端可以很快呼应。第一种路子的完成对照复杂,本文先容第二种路子的完成办法。
完成办法
----将Server真个查询了局保留在一个静态数组中,即在Session_OnStart过程当中声明一个二维的静态数组。当Server端收到Client端提交的请求后,起首判别请求是前提查询仍是换页,如是前提查询则辨别查询前提是不是与前次提交的查询前提分歧,如分歧则实行查询,将查询了局保留在该数组中,然后向Client端前往第一页的内容,不然间接从该数组中前往响应页的内容。
程序完成
----1.界说二维数组及其他变量
SubSession_OnStart
dimTempDb()
redimPreserveTempDb(1,2)
session(“StoredArray")=TempDb
’界说一个Session数组
session(“iPageCount")=0
session(“iPageNo")=0
......
EndSub
----2.挪用存储历程前往数据
SubGetRecordSet(strBbmc,strKssj,
strZzsj,strNodeCode,strFxzl)
参数为报表称号和各个限定前提
selectcasestrBbmc
case“买卖汇总表"
strCnn=“PROVIDER=MSDASQL;dsn=sqldb;
uid=sa;pwd=123456;database=vlog;"
Setobjcnn=Server.CreateObje(“ADODB.Connection")
objcnn.CommandTimeout=9999999
objcnn.ConnectionTimeout=99999999
objcnn.CursorLocation=adUseClient
objcnn.OpenstrCnn翻开毗连
SetobjRs=Server.CreateObject
(“ADODB.Recordset")
objRS.PageSize=iPageSize
objRS.CacheSize=iPageSize
objRs.Open“sszhatmlog‘“&strKssj&",
‘“&strZzsj&",‘“&strNodeCode&",
‘“&strFxzl&"",objcnn,adOpenStatic,
adLockReadOnly,1
’实行存储历程前往查询了局
......
EndSub
----3.将查询了局保留到静态数组
SubSaveRecordSet()
ifobjRs.EOF=falsethen
objRs.movelast
session(“iRowCount")=objRs.recordCount
session(“iFieldCount")=objRs.Fields.Count
session(“iPageCount")=objRs.pagecount
redimPreserveTempArray(session
(“iRowCount"),session(“iFieldCount"))
’TempArray是一个二维静态数组,
依据纪录集巨细从头界说其巨细
objRs.MoveFirst
iCount=0
dowhileobjRs.EOF=false
iCount=iCount+1
fori=1tosession(“iFieldCount")
TempArray(iCount,i)=objRs.Fields.Item
(i-1).value
next
objRs.MoveNext
loop
session(“StoredArray")=TempArray
objRs.Close
else
session(“iPageCount")=0
endif
EndSub
----4.显现纪录内容
SubShowRecord()
......
LocalArray=session(“StoredArray")
iShowTotal=(iPageCurrent-1)*iPageSize+1
iRowLoop=1
dowhileiRowLoop<=iPageSizeandiShowTotal
<=session(“iRowCount")
Response.Write(“<TR>")
fori=1Tosession(“iFieldCount")
Response.write(“<TD>"
&LocalArray(iShowTotal,i))Next
Response.Write(“</TR>")
iShowTotal=iShowTotal+1
iRowLoop=iRowLoop+1loop
Response.Write(“</TABLE>")
ifiPageCurrent1and
iPageCurrent<session
(“iPageCount")then
%>
<center><AHREF=“db_pag.asp?page=<%=
iPageCurrent-1%>">前一页</A><AHREF=
“db_pag.asp?page=<%=iPageCurrent+1%>">
后一页</A></center>
<%
else
ifiPageCurrent1then
%>
<center><AHREF=“db_pag.asp?page=<%=
iPageCurrent-1%>">前一页</A></center>
<%
endif
ifiPageCurrent<session(“iPageCount")then
%>
<center><AHREF=“db_pag.asp?page=
<%=iPageCurrent+1%>">后一页</A>
</center>
<%
endif
endif
EndSub
----5.主程序
ifRequest.QueryString(“page")=“"then
’提交查询请求而且查询前提与上一次分歧
......
callGetRecordSet(strBbmc,strKssj,strZzsj,
strNodeCode,strFxzl)
callSaveRecordSet
Else
iPageCurrent=CInt(Request.QueryString(“page"))
strKssj=session(“strKssj")
endif
ifsession(“iPageCount")=0then
Response.Write“抱愧!没有满意前提的纪录"
Response.Write“<Br>"
else
callshowrecord()
endif
停止语
----本程序的关头在于Session数组的界说及其赋值的完成,经由过程使用Session数组能够进步处置大批数据的使用程序的功能。
</p>Access是一种桌面数据库,只适合数据量少的应用,在处理少量数据和单机访问的数据库时是很好的,效率也很高。但是它的同时访问客户端不能多于4个。access数据库有一定的极限,如果数据达到100M左右,很容易造成服务器iis假死,或者消耗掉服务器的内存导致服务器崩溃。 |
|