|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
对用户来说可预见费用、节约费用,可以做到花少钱办大事。由于省去了购买软件和硬件等的前期费用,用户可以租用较高级的应用软件。ASP的收费是根据软件的类型、客制化程度、用户数量、服务期限来定的,对客户来说这笔费用是可以预见的。方便于客户应用软件的升级。分页|数据|数据库一:一个陈词滥调的成绩。
我们晓得,纪录集分页是数据库处置中非常罕见的成绩。而当我们计划到收集数据库,就是说要思索传输带宽成绩时,分页成绩就屡屡困扰着每个数据库程序计划职员。
二:分页成绩的办理计划汇总
提及办理的计划,每一个数据库计划职员大概城市举出很多办法。但细分后,能够回为三类。一:Ado记录集分页、二:专储纪录集分页、3、数据库游标分页。
一:出名的ADO记录集分页。
说到出名,由于这个多是最复杂和罕见的分页办法了。(大概也是用的最多的)就是使用ADO自带的分页功效来完成分页。
详细流程为,数据库依据查询语句前往一个完全的记录集。然后到客户端后有客户真个游标举行分页。他们年夜多半由ADO自带的Recordset工具就能够完成了。大概触及到的属性有:
recordset.pagesize:每页输入记录集的巨细
recordset.AbsolutePage: 以后输入的页 (有以上的两个属性实在就能够完成份页输入了)
recordset.pagecount: 今朝的总页数。
这类办法好欠好呢,有的人说是非常好,也有人说效力不高。实在这的依据实践的使用情况来断定,假如是单机数据库,大概是局域网情况,大概数据库记录较少,则他都是很好的分页办法,并且假如不触及到收集和更新较少的情况里,则他能够说是最好的分页办法。由于它能够师长教师成一个缓存纪录集,今后的几页记录都能够欠亨过数据库来取便可。可是,假如触及到收集,大概是更新频仍。他就不是很有用的了。
枚举程序。(我们都用收集成绩来思索)
nowpage=Request("nowpage") 以后的输入页
if nowpage="" or nowpage<1 then nowpage=1
set rs=server.CreateObject("adodb.recordset")
rs.CursorType=1
sql="select * from table1 "
rs.open sql,strconn (strconn为毗连字段,已界说过)
rs.PageSize=20 以后页的巨细
if cint(nowpage)>rs.pagecount then nowpage=rs.pagecount
rs.AbsolutePage=nowpage
然后输入以后一页的记录
.............
还能够供应一下程序属性设置。
首页:nowpage=1
前页:nowpage=nowpage-1
下页:nowpage=nowpage+1
尾页:nowpage=rs.pagecount
总记录数:rs.recordcount
总页数:rs.pagecount
二:转储记录集分页。
这类办法出生于收集时期,就是使用服务器真个壮大处置历程,先将方针数据库存到一个一时的数据库里,而且加上一个自增字段来举行分别页面,最初将所需流动数量的记录集传回。
长处是:只需交互一次,并且前往流动一页的记录集。
弱点是:假如记录集增年夜时则每次都需创建一个一时记录集,也对照耗工夫,但削减了收集传输量。
例子:
(
取自 Worx 英文版的<<Professional Active Server Pages 3.0>>
ISBN1861002610
关头中央我已作了中文翻译
)
CREATE PROCEDURE usp_PagedAuthors
@iPageint,
@iPageSizeint
AS
BEGIN
-- disable row counts
SET NOCOUNT ON
-- declare variables
DECLARE @iStartint-- start record
DECLARE @iEndint-- end record
DECLARE @iPageCountint-- total number of pages
-- create the temporary table
--创建一时表。
CREATE TABLE #PagedAuthors (
--这个自增字段非常关头,就是靠他来完成份页标示。
IDintIDENTITY,
au_idvarchar(11)NOT NULL ,
au_lnamevarchar(40)NOT NULL ,
au_fnamevarchar(20)NOT NULL ,
phonechar(12)NOT NULL ,
addressvarchar(40)NULL ,
cityvarchar(20)NULL ,
statechar(2)NULL ,
zipchar(5)NULL ,
contractbitNOT NULL
)
-- populate the temporary table
--先转存到下面的这个记录集。
INSERT INTO #PagedAuthors (au_id, au_lname, au_fname,
phone, address, city, state, zip, contract)
SELECTau_id, au_lname, au_fname,
phone, address, city, state, zip, contract
FROMauthors
-- work out how many pages there are in total
SELECT@iPageCount = COUNT(*)
FROM authors
SELECT@iPageCount = CEILING(@iPageCount / @iPageSize) + 1
-- check the page number
IF @iPage < 1
SELECT @iPage = 1
IF @iPage > @iPageCount
SELECT @iPage = @iPageCount
-- calculate the start and end records
SELECT @iStart = (@iPage - 1) * @iPageSize
SELECT @iEnd = @iStart + @iPageSize + 1
-- select only those records that fall within our page
--这条sql语句就是拔取流动的记录集。
SELECTau_id, au_lname, au_fname,
phone, address, city, state, zip, contract
FROM#PagedAuthors
WHEREID > @iStart
ANDID < @iEnd
DROP TABLE #PagedAuthors
-- turn back on record counts
SET NOCOUNT OFF
-- Return the number of records left
RETURN @iPageCount
END
而输入端能够用最快范例的ADO"前方光标"依次输入便可
<%
Dim cmdAuthors
Dim rsData
Dim iPage
Dim iLastPage
Dim sQuote
sQuote = Chr(34)
get the requested data
If Request.QueryString("PAGE") = "" Then
iPage = 1
Else
iPage = CInt(Request.QueryString("PAGE"))
If iPage < 1 Then
iPage = 1
End If
End If
create the objects
Set cmdAuthors = Server.CreateObject("ADODB.Command")
Set rsAuthors = Server.CreateObject("ADODB.Recordset")
With cmdAuthors
.ActiveConnection = strConn
.CommandText = "usp_PagedAuthors"
.CommandType = adCmdStoredProc
.Parameters.Append .CreateParameter("RETURN_VALUE", adInteger, _
adParamReturnValue)
.Par</p>由于ASP提供的是一对多的服务,所以用户的一些特殊需求很难得到满足。 |
|