不错呦!smile@林凯西,确保“准备文件”中的几个文件都有安装,S...您好,看了您这篇帖子觉得很有帮助。但是有个问题想请...我的修改过了怎么还被恶意注册呢 @jjjjiiii 用PJ快9年了,主要是A...PJ3啊,貌似很少有人用PJ了,现在不是WP就是z...@332347365,我当时接入时错误码没有-10...楼主,ChkValue值应为-103是什么意思呢?...大哥 你最近能看到我发的信息,请跟我联系,我有个制...
关于分页的一点思路
编辑:dnawo 日期:2007-02-15
前言
很多ASP方面的书籍在讲述分页的时候都是利用RecordSet对象的pagesize、absolutepage属性进行,这种方法很简单,很多ASP程序员在做分页程序时用的也就是这个方法。这方法在小型系统中是可取的,但在大系统中记录达到百万级、千万级的时候缺点就变得非常突出了:非常耗系统资源,原因非常简单:这种方法在读取数据时,先不管你要取哪些记录,都是一次性先把所以记录读取出来保存在RecordSet对象中,再进行分页,如果多人同时进行读取的话,严重时将导致当机。
其实在我刚接触分页这个概念时就想这不是一件容易的事么?比如每页要显示10条记录,显示第1页时只需在查询条件中加入“id>=1 and id<11”,显示第2则为“id>=11 and id<21”,很简单嘛!后来才发觉没有想像中的容易,因为在删除记录后id就变得不连续了,用这种方法就行不通了。但我们可以转个思路:既然不能用页数来判断出每页第一条记录的id和最后一条记录的id,但如果我们事先就知道每页第一条记录及最后一记录id的话,不就还能用上边的方法了吗?呵呵。根据每页显示的记录数得出每页第一条记录和最后一条记录的id不难,问题是这些id应以什么样的形式保存?保存在哪边?你可以将这些id保存在一个文本文件中,也可以将它们保存在Application对象中以供调用,下边我们要讲的就是利用第二种方法。
实现原理
将每页第一条记录及最后一条记录的id以逗号分隔组成一个字符串保存到Application对象中,当然,这条语句必须放在Global.asa文件的application_onstart过程内;然后自定义一个过程,其作用是更新Application对象的内容及重写Global.asa文件,在每次添加或删除记录时就得调用下这个过程。
应用举例
1.新建一个Global.asa文件,内容可以为空。
2.定义一个过程loadpages,其功能是更新Application对象的内容及重写Global.asa文件。
3.下边过程用于显示分页列表
4.应用页面:
5.注意:添加或删除记录后必须调用一次loadpages过程!
很多ASP方面的书籍在讲述分页的时候都是利用RecordSet对象的pagesize、absolutepage属性进行,这种方法很简单,很多ASP程序员在做分页程序时用的也就是这个方法。这方法在小型系统中是可取的,但在大系统中记录达到百万级、千万级的时候缺点就变得非常突出了:非常耗系统资源,原因非常简单:这种方法在读取数据时,先不管你要取哪些记录,都是一次性先把所以记录读取出来保存在RecordSet对象中,再进行分页,如果多人同时进行读取的话,严重时将导致当机。
其实在我刚接触分页这个概念时就想这不是一件容易的事么?比如每页要显示10条记录,显示第1页时只需在查询条件中加入“id>=1 and id<11”,显示第2则为“id>=11 and id<21”,很简单嘛!后来才发觉没有想像中的容易,因为在删除记录后id就变得不连续了,用这种方法就行不通了。但我们可以转个思路:既然不能用页数来判断出每页第一条记录的id和最后一条记录的id,但如果我们事先就知道每页第一条记录及最后一记录id的话,不就还能用上边的方法了吗?呵呵。根据每页显示的记录数得出每页第一条记录和最后一条记录的id不难,问题是这些id应以什么样的形式保存?保存在哪边?你可以将这些id保存在一个文本文件中,也可以将它们保存在Application对象中以供调用,下边我们要讲的就是利用第二种方法。
实现原理
将每页第一条记录及最后一条记录的id以逗号分隔组成一个字符串保存到Application对象中,当然,这条语句必须放在Global.asa文件的application_onstart过程内;然后自定义一个过程,其作用是更新Application对象的内容及重写Global.asa文件,在每次添加或删除记录时就得调用下这个过程。
应用举例
1.新建一个Global.asa文件,内容可以为空。
2.定义一个过程loadpages,其功能是更新Application对象的内容及重写Global.asa文件。
复制内容到剪贴板
程序代码

'函数名称:loadpages
'功能说明:搜索指定表,每页显示Pagesize条记录,将每页第一条记录及最后一条记录的id以逗号分隔组成一个字符串保存到Application对象中并更新Global.asa文件
'参数说明:sTable:搜索表名
'其他说明:1.必须先新有Connection对象实例conn
' 2.数据库中必须有id字段,类型为自动编号
' 3.注意Global.asa文件路径
Sub loadpages(sTable)
'以下更新Application对象中的值
Dim Pagesize,LoadSql,LoadRs
Pagesize = 20
Application.Lock
Application("pages") = ""
LoadSql = "Select * from " & sTable & " order by id desc"
Set LoadRs = Server.CreateObject("ADODB.RecordSet")
LoadRs.open LoadSql,conn,1,2
If not LoadRs.eof then
If LoadRs.RecordCount < Pagesize then
Application("pages") = Application("pages") & LoadRs("id") & ","
LoadRs.movelast
Application("pages") = Application("pages") & LoadRs("id")
Else
Dim i
Do while not LoadRs.eof
Application("pages") = Application("pages") & LoadRs("id") & ","
LoadRs.move(Pagesize)
Loop
If LoadRs.RecordCount mod Pagesize <> 1 then
LoadRs.movelast
Application("pages") = Application("pages") & LoadRs("id") & ","
End if
Application("pages") = Left(Application("pages"),len(Application("pages"))-1)
End if
Else
Application("pages") = "nopages"
End if
LoadRs.close
Set LoadRs = nothing
Application.Unlock
'以下更新Global.asa文件
Dim fso,path
path = Server.MapPath("Global.asa")
Set fso = Server.CreateObject("Scripting.FileSystemObject")
If fso.FileExists(path) then
Dim TextFile,content
Set TextFile = fso.OpenTextFile(path,2,true)
content = "<Script language=""VBScript"" runat=""server"">" & vbcrlf
content = content & "Sub application_onstart" & vbcrlf
content = content & "Application.lock" & vbcrlf
content = content & "Application(""pages"")=""" & Application("pages") & """" & vbcrlf
content = content & "Application.Unlock" & vbcrlf
content = content & "End Sub" & vbcrlf
content = content & "</Script>" & vbcrlf
TextFile.write content
Set TextFile = nothing
End if
Set fso = nothing
End Sub
'功能说明:搜索指定表,每页显示Pagesize条记录,将每页第一条记录及最后一条记录的id以逗号分隔组成一个字符串保存到Application对象中并更新Global.asa文件
'参数说明:sTable:搜索表名
'其他说明:1.必须先新有Connection对象实例conn
' 2.数据库中必须有id字段,类型为自动编号
' 3.注意Global.asa文件路径
Sub loadpages(sTable)
'以下更新Application对象中的值
Dim Pagesize,LoadSql,LoadRs
Pagesize = 20
Application.Lock
Application("pages") = ""
LoadSql = "Select * from " & sTable & " order by id desc"
Set LoadRs = Server.CreateObject("ADODB.RecordSet")
LoadRs.open LoadSql,conn,1,2
If not LoadRs.eof then
If LoadRs.RecordCount < Pagesize then
Application("pages") = Application("pages") & LoadRs("id") & ","
LoadRs.movelast
Application("pages") = Application("pages") & LoadRs("id")
Else
Dim i
Do while not LoadRs.eof
Application("pages") = Application("pages") & LoadRs("id") & ","
LoadRs.move(Pagesize)
Loop
If LoadRs.RecordCount mod Pagesize <> 1 then
LoadRs.movelast
Application("pages") = Application("pages") & LoadRs("id") & ","
End if
Application("pages") = Left(Application("pages"),len(Application("pages"))-1)
End if
Else
Application("pages") = "nopages"
End if
LoadRs.close
Set LoadRs = nothing
Application.Unlock
'以下更新Global.asa文件
Dim fso,path
path = Server.MapPath("Global.asa")
Set fso = Server.CreateObject("Scripting.FileSystemObject")
If fso.FileExists(path) then
Dim TextFile,content
Set TextFile = fso.OpenTextFile(path,2,true)
content = "<Script language=""VBScript"" runat=""server"">" & vbcrlf
content = content & "Sub application_onstart" & vbcrlf
content = content & "Application.lock" & vbcrlf
content = content & "Application(""pages"")=""" & Application("pages") & """" & vbcrlf
content = content & "Application.Unlock" & vbcrlf
content = content & "End Sub" & vbcrlf
content = content & "</Script>" & vbcrlf
TextFile.write content
Set TextFile = nothing
End if
Set fso = nothing
End Sub
3.下边过程用于显示分页列表
复制内容到剪贴板
程序代码

'函数名称:pageslist
'功能说明:显示分页列表
'参数说明:newview:浏览信息面文件名
'其他说明:1.page_no为当前页面参数
Sub pageslist(newview)
Dim arr,pages,page_no
arr = Split(Application("pages"),",")
pages = Ubound(arr)
page_no = request.QueryString("page_no")
page_no = Cint(page_no)
If page_no <1 then page_no = 1
If page_no >pages then page_no = pages
'首页
Response.write "<a href=""" & newview & "?page_no=1"">首页</a>"
'上一页
If page_no = 1 then
Response.write "上一页"
Else
Response.write "<a href=""" & newview & "?page_no=" & page_no-1 & """>上一页</a>"
End if
'下一页
If page_no = pages then
Response.write "下一页"
Else
Response.write "<a href=""" & newview & "?page_no=" & page_no+1 & """>上一页</a>"
End if
'尾页
Response.write "<a href=""" & newview & "?page_no=" & pages & """>尾页</a>"
End Sub
'功能说明:显示分页列表
'参数说明:newview:浏览信息面文件名
'其他说明:1.page_no为当前页面参数
Sub pageslist(newview)
Dim arr,pages,page_no
arr = Split(Application("pages"),",")
pages = Ubound(arr)
page_no = request.QueryString("page_no")
page_no = Cint(page_no)
If page_no <1 then page_no = 1
If page_no >pages then page_no = pages
'首页
Response.write "<a href=""" & newview & "?page_no=1"">首页</a>"
'上一页
If page_no = 1 then
Response.write "上一页"
Else
Response.write "<a href=""" & newview & "?page_no=" & page_no-1 & """>上一页</a>"
End if
'下一页
If page_no = pages then
Response.write "下一页"
Else
Response.write "<a href=""" & newview & "?page_no=" & page_no+1 & """>上一页</a>"
End if
'尾页
Response.write "<a href=""" & newview & "?page_no=" & pages & """>尾页</a>"
End Sub
4.应用页面:
复制内容到剪贴板
程序代码

<!--#include file="Conn.asp" -->
<%
Dim arr,pages,page_no
arr = Split(Application("pages"),",")
pages = Ubound(arr)
page_no = request.QueryString("page_no")
If isnull(page_no) then page_no = 1
page_no = Cint(page_no)
If page_no <1 then page_no = 1
If page_no >pages then page_no = pages
Dim sqlstr,rs
If page_no = pages then
sqlstr = "select * from news2 where id<=" & arr(page_no-1) & " and id>=" & arr(page_no) & " order by id desc"
Else
sqlstr = "select * from news2 where id<=" & arr(page_no-1) & " and id>" & arr(page_no) & " order by id desc"
End if
Set rs = Server.CreateObject("ADODB.RecordSet")
rs.open sqlstr,conn,1,2
do while not rs.eof
Response.write rs("id") & ","
rs.movenext
Loop
Call pageslist("newsview.asp")
rs.close
Set rs = nothing
conn.close
Set conn = nothing
%>
<%
Dim arr,pages,page_no
arr = Split(Application("pages"),",")
pages = Ubound(arr)
page_no = request.QueryString("page_no")
If isnull(page_no) then page_no = 1
page_no = Cint(page_no)
If page_no <1 then page_no = 1
If page_no >pages then page_no = pages
Dim sqlstr,rs
If page_no = pages then
sqlstr = "select * from news2 where id<=" & arr(page_no-1) & " and id>=" & arr(page_no) & " order by id desc"
Else
sqlstr = "select * from news2 where id<=" & arr(page_no-1) & " and id>" & arr(page_no) & " order by id desc"
End if
Set rs = Server.CreateObject("ADODB.RecordSet")
rs.open sqlstr,conn,1,2
do while not rs.eof
Response.write rs("id") & ","
rs.movenext
Loop
Call pageslist("newsview.asp")
rs.close
Set rs = nothing
conn.close
Set conn = nothing
%>
5.注意:添加或删除记录后必须调用一次loadpages过程!
评论: 1 | 引用: 0 | 查看次数: 5322
发表评论
请登录后再发表评论!