支持多风格变换的ASP分页类

来源:岁月联盟 编辑:zhuzhu 时间:2006-12-12
这个分页使用的是0游标,也就是Rs.Open Sql,Conn,0,1。但是感觉也快不了多少,10万条数据的分页时间300多豪秒之间。
  <%
  Class Page
  Private CurrPage
  Private PageN
  Private UrlStr
  Private TempStr
  Private ErrInfo
  Private IsErr
  Private TotalRecord
  Private TotalPage
  Public  PageRs

  Private TempA(11)
  Private TempB(8)
  '------------------------------------------------------------
  Private Sub Class_Initialize()
   CurrPage=1'//默认显示当前页为第一页
   PageN=10'//默认每页显示10条数据
   UrlStr="#"
   TempStr=""
   ErrInfo="ErrInfo:"
   IsErr=False
  End Sub
  Private Sub Class_Terminate()
   If IsObject(PageRs) Then
    PageRs.Close
    Set PageRs=Nothing
   End If
   Erase TempA
   Erase TempB
  End Sub
  '----------------------------------------------------------
  '//获取当前页码
  Public Property Let CurrentPage(Val)
   CurrPage=Val
  End Property
  Public Property Get CurrentPage()
   CurrentPage=CurrPage
  End Property
  '//获取每页显示条数
  Public Property Let PageNum(Val)
   PageN=Val
  End Property
  Public Property Get PageNum()
   PageNum=PageN
  End Property
  '//获取URL
  Public Property Let Url(Val)
   UrlStr=Val
  End Property
  Public Property Get Url()
   Url=UrlStr
  End Property
  '//获取模板
  Public Property Let Temp(Val)
   TempStr=Val
  End Property
  Public Property Get Temp()
   Temp=TempStr
  End Property
  '------------------------------------------------------------

Public Sub Exec(Sql,ConnObj)
   On Error Resume Next
   Set PageRs=Server.CreateObject("ADODB.RecordSet")
   PageRs.CursorLocation = 3 '使用客户端游标,可以使效率提高
   PageRs.PageSize = PageN '定义分页记录集每页显示记录数
   PageRs.Open Sql,ConnObj,0,1
   If Err.Number<>0 Then
   Err.Clear
  PageRs.Close
  Set PageRs=Nothing
   ErrInfo=ErrInfo&"建立或打开记录集错误..."
  IsErr=True
  Response.Write ErrInfo
  Response.End
   End If
   TotalRecord=PageRs.RecordCount'//如果为0呢?
   If TotalRecord>=1 Then
   '----------------------------------------------------------------------------开始
   '//计算总页数,Ps,为什么不用PageRs.PageCount呢?
   'If TotalRecord Mod PageN=0 Then
   'TotalPage=PageRs.RecordCount/PageN
   'Else
   'TotalPage=PageRs.RecordCount/PageN
  'TotalPage=Abs(Int(TotalPage))
   'End If
  TotalPage=PageRs.PageCount
   '//处理当前接收页码,默认的为1,所以不是数字类型的都会为1
   If IsNumeric(CurrPage) Then
   CurrPage=CLNg(CurrPage)
   If CurrPage<1 Then CurrPage=1
   If CurrPage>TotalPage Then CurrPage=TotalPage
   Else
    '//Dim M:M="":IsNumeric(M)=True
   CurrPage=1
   End If
   '---------------------------------------------------------------------------结束
   Else
   TotalPage=0
   CurrPage=1
   End If
   '//
   PageRs.AbsolutePage = CurrPage 'absolutepage:设置指针指向某页开头
   PageRs.PageSize=PageN
  End Sub
  Private Sub Init()
   'Private TempA(10)
   TempA(1)="{N1}" '//首页
   TempA(2)="{N2}"'//上一页
   TempA(3)="{N3}"'//下一页
   TempA(4)="{N4}"'//尾页
   TempA(5)="{N5}"'//当前页码


   TempA(6)="{N6}"'//页码总数
   TempA(7)="{N7}"'//每页条数
   TempA(8)="{N8}"'//文章总数
   TempA(9)="{L}"'//循环标签开始
   TempA(10)="{N}"'//循环内单标签:页码
   TempA(11)="{L