ASP通用分页类1.2.24

该ASP通用分页类主要是易用, 速度取决于实际应用: 自动使用Cookies缓存记录总数;若指定了统计语句(strSqlCount 属性), 则取决于该语句的统计效率; 若统计语句未指定, 则根据用户给定的查询语句, 取RecordCount属性值, 当然这样在首页显示时, 速度取决于记录总数, 效率不高. 若您在应用中遇到问题, 请使用MSN与我联系: xiaoyuehen(at)msn.com

 适用范围:


1. 用于一般分页需求, 只需指定查询语句及其他几个主要参数即可, 方便易用.
2.分页的速度取决于你给的 SQL 语句执行效率.
3.可指定记录数统计语句, 减少统计时间.
4.自动缓存记录数, 加快分页间跳转速度.
5. 若查询语句关键字经常变动, 置为不缓存, 以免影响查询结果.
6.若不喜欢类产生的分页导航, 可获得其他属性信息, 自己设定导航样式.

 相关属性:

strSQL : 只写(必要), 查询语句

strPageUrl : 只写(必要), 转向地址

strSQLCount : 可写, 记录数统计语句

intPageNow : 可读/可写(必要), 获得当前所在页 / 设置当前所在页

objConn : 只写(必要), 已打开的数据库连接对象, 当有多次使用时, 只需设置一次

getArray : 只读, 获取二维数组形式的当前页记录, 使用时, 必须用isarray()方法判断.

getRecordSet : 只读, 获取记录集对象, 游标已定位至当前页.

intPageMax: 只读, 获得总页数

strPageInfo : 只读, 获得默认分页样式

intRecordCount : 只读, 获得当前记录总数

intCache : 可写, 是否缓存记录数(Cookies), 默认缓存. 不缓存时需设置为 0

strPageVar : 可写, 设置页面传递参数, 默认为"page"

intPageSize : 可写, 每页显示记录数, 默认20

类文件:
rel="stylesheet" type="text/css" href="d:/htmlcode/style/aspvbs.css" />

<%
Rem ************************************************
Rem ** 作者: 萧月痕(xiaoyuehen)
Rem ** ASP 通用分页类
Rem ** 版本: 1.2.24
Rem ** 最后修改: 2006-5-20
Rem ** 联系作者: xiaoyuehen(at)msn.com
Rem ************************************************

Class Cls_PageView
Private sbooInitState
Private sstrPageUrl
Private sstrPageVar
Private sstrSql
Private sstrSqlCount
Private sintCache

Private sintRecordCount
Private sintPageSize
Private sintPageNow
Private sintPageMax

Private sobjConn

Private sstrPageInfo

Private sobjRs, sbooInitRecordSet

Rem ## SQL语句
Public Property Let strSQL(Value)
'当重新赋值时, 重置所有参数
Call ClearVars()
sstrSql = Value
End Property

Rem ## SQL语句
Public Property Let strSQLCount(Value)
sstrSqlCount = Value
End Property

Rem ## 转向地址
Public Property Let strPageUrl(Value)
sstrPageUrl = Value
End Property

Rem ## 是否缓存记录总数
Public Property Let intCache(Value)
sintCache = toNum(Value, 1)
End Property

Rem ## 每页显示的记录条数
Public Property Let intPageSize(Value)
sintPageSize = toNum(Value, 20)
End Property

Rem ## 数据库连接对象
Public Property Let objConn(Value)
Set sobjConn = Value
End Property

Rem ## 设置页面参数
Public Property Let strPageVar(Value)
sstrPageVar = Value
End Property

Rem ## 设置当前页
Public Property Let intPageNow(Value)
sintPageNow = toNum(Value, 1)
End Property

Rem ## 获得当前页
Public Property Get intPageNow()
intPageNow = sintPageNow
End Property

Rem ## 获得当前页
Public Property Get intPageMax()
intPageMax = sintPageMax
End Property

Rem ## 获得记录总数
Public Property Get intRecordCount()
intRecordCount = sintRecordCount
End Property

Rem ## 默认分页信息
Public Property Get strPageInfo()
strPageInfo = sstrPageInfo
End Property

Private Sub Class_Initialize

End Sub

Private Sub class_terminate()
Set sobjConn = nothing
End Sub

Private Sub ClearVars()
sbooInitState = False
sstrPageUrl = ""
sstrPageVar = "page"
sintCache = 1

sintPageSize = 20
sintPageNow = 1
sintPageMax = 1
sintRecordCount = -1
sbooInitRecordSet = False
End Sub

Rem ## 初始化分页信息
Private Sub InitPageInfo()
If sintPageNow <= 0 Then sintPageNow = 1
If sintRecordCount mod sintPageSize = 0 Then
sintPageMax = sintRecordCount / sintPageSize
Else
sintPageMax = sintRecordCount / sintPageSize + 1
End If
If sintPageNow > sintPageMax Then sintPageNow = sintPageMax

sstrPageInfo = ""

Dim surl
surl = sstrPageUrl
If surl = "" Then Exit Sub

If Instr(1, surl, "?", 1) > 0 Then
surl = surl & "&" & sstrPageVar & "="
Else
surl = surl & "?" & sstrPageVar & "="
End If

If sintPageNow <= 1 then
sstrPageInfo = "首页 上一页"
Else
sstrPageInfo = sstrPageInfo & " <a href=""" & surl & "1"">首页</a>"
sstrPageInfo = sstrPageInfo & " <a href=""" & surl & (sintPageNow - 1) & """>上一页</a>"
End If

If sintPageMax - sintPageNow < 1 then
sstrPageInfo = sstrPageInfo & " 下一页 末页 "
Else
sstrPageInfo = sstrPageInfo & " <a href=""" & surl & (sintPageNow + 1) & """>下一页</a> "
sstrPageInfo = sstrPageInfo & " <a href=""" & surl & sintPageMax & """>末页</a> "
End If

sstrPageInfo = sstrPageInfo & " 页次:<strong><font color=""#990000"">" & sintPageNow & "</font> / " & sintPageMax & " </strong>"
sstrPageInfo = sstrPageInfo & " 共 <strong>" & sintRecordCount & "</strong> 条记录 <strong>" & sintPageSize & "</strong> 条/页 "
End Sub

Rem ## 长整数转换
Private function toNum(s, Default)
s = s & ""
If s <> "" And IsNumeric(s) Then
toNum = CLng(s)
Else
toNum = Default
End If
End function

Rem ## 取记录数Cookies值
Private function initRecordCountCache()
dim intRecordCount
intRecordCount = toNum(request.Cookies("sys_cls_pageview_record_count"), 0)
if intRecordCount > 0 then
sintRecordCount = intRecordCount
end if
end function

Rem ## 储存记录数Cookies值
Rem ## 只在来源页面与当前页面不同时执行
Private function setRecordCountCache()
if (sintRecordCount > 0) then
response.Cookies("sys_cls_pageview_record_count") = sintRecordCount
end if
end function

Rem ## 判断是否来自不同的页面
Private function ReferPageWasCurrentPage()
ReferPageWasCurrentPage = true

dim strRefer, strCurrent
strRefer = request.ServerVariables("HTTP_REFERER")
strRefer = Replace(strRefer, "/", "/")
strCurrent = request.ServerVariables("SCRIPT_NAME")
if ((strRefer <> "") and (instr(1, strRefer, strCurrent, 1) > 0)) then exit function

ReferPageWasCurrentPage = false
end function

Rem ## 类初始化
Private Sub InitClass()
sbooInitState = True
If Not(IsObject(sobjConn)) Then
sbooInitState = False

response.write("数据库连接未指定")
response.End()
End If
If Trim(sstrSql) = "" Then
sbooInitState = False

response.write("SQL语句未指定")
response.End()
End If
sintPageSize = toNum(sintPageSize, 20)
If (sintPageSize < 1) Or (sintPageSize > 100) Then
sbooInitState = False

response.write("每页记集数未设置或不符合规则(1 - 100)")
response.End()
End If
sintPageNow = toNum(sintPageNow, 1)
End Sub

Rem ## 初始化记录集对象
Private Sub InitRecordSet()
Call InitClass()
If Not sbooInitState Then
Response.Write("分页类初始化失败, 请检查各参数情况")
Exit Sub
End If

Rem 读取缓存记录数总数
Call initRecordCountCache()

Dim rs, sql, bReferIsCurrent
bReferIsCurrent = ReferPageWasCurrentPage()
sql = sstrSql

Set rs = Server.CreateObject("Adodb.RecordSet")

Rem 若从其他页面转入或不缓存记录数, 则重新统计
If ((bReferIsCurrent = false) Or (sintRecordCount < 0) Or (sintCache = 0)) and (sstrSqlCount <> "") Then
rs.Open sstrSqlCount, sobjConn, 1, 1
If Not(rs.eof or rs.bof) Then
sintRecordCount = rs(0)
Else
sintRecordCount = 0
End If
rs.Close
End If

Rem ## 使用客户端游标
Rem ## 不加该语句时, 若最后一页只有一条记录
Rem ## 则显示不出来..
Rem ## 但加了之后速度减慢N多..:(
'rs.cursorlocation = 3
rs.open sql, sobjConn, 1, 1, 1

Rem 若无记录统计语句且未设定记录总数, 则由记录集RecordCount属性得出.
If sintRecordCount < 0 Then
sintRecordCount = rs.RecordCount
End If
If sintRecordCount < 0 Then sintRecordCount = 0

'生成分页信息
Call InitPageInfo()

If Not(rs.eof or rs.bof) Then
rs.PageSize = sintPageSize
rs.AbsolutePage = sintPageNow
Set sobjRs = rs
Else
sobjRs = null
End If

Rem ## 缓存记录总数
if sintCache <> 0 then
Call setRecordCountCache()
end if

sbooInitRecordSet = True
End Sub

Public Property Get getRecordSet()
If sbooInitRecordSet = False Then
Call InitRecordSet()
End If

If IsNull(sobjRs) then
getRecordSet = null
Else
Set getRecordSet = sobjRs
End If
End Property

Public Property Get getArray()
If sbooInitRecordSet = False Then
Call InitRecordSet()
End If

Rem ## 当获得该属性时, 释放sobjRs
If Not IsNull(sobjRs) Then
If Not(sobjRs.eof or sobjRs.bof) Then
getArray = sobjRs.getrows(sintPageSize)
Else
getArray = ""
End If
sobjRs.Close
Set sobjRs = nothing

Rem ## 设置初始化指示否
Rem ## 以便当用户又回头调用getRecordSet时出现空的情况
sbooInitRecordSet = False
Else
getArray = ""
End If
End Property
End Class
%>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值