asp的通用数据分页类

  (原创)<!--#include file="Conn.asp" -->

  通用数据分页类

  通用分页类,以后写分页显示数据时就轻松多啦.直接调用此类,然后再Execute即可以取得当前页的所有数据.

  此类所做的工作是只取得当前页的数据,和总页数和总记录数等等数据.

  ASP代码:

  <%

  '/*****************************分页显示类**************************

  '/* 作者:哇哇鱼

  '/* 日期:2004年11月18日

  '/* 作用:取得某一页的数据并返回给外部

  '/* 说明示例:

  '/* Dim MyPage=New PageClass

  '/* MyPage.Conn=Conn                '设置连接对象

  '/* MyPage.PageSize=20                 '设置一页显示多少条数据 (默认为10条)

  '/* MyPage.CurPage=2                   '设置当前要显示的页码

  '/*''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

  '/* MyPage.TableName="Member"       '设置表名

  '/* MyPage.Fields="ID,MemberName,MemberPass"   '设置显示字段列表

  '/* MyPage.Condition="ID>100"          '设置查询条件

  '/* MyPage.OrderBy="ID DESC"           '设置排序条件(一定要设置该属性)

  '/* Set PageRs=MyPage.Execute          '返回当前第2页的数据(RecordSet对象),如果出错则返回Nothing值

  '/*''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

  '/*'以上的定义也可以用以下的方法:ExecuteBy("表名","字段列表","查询条件","排序条件")

  '/* Set PageRs=MyPage.ExecuteBy("Member","ID,MemberName,MemberPass","ID>100","ID DESC")

  '/*''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

  '/* PageCount=MyPage.PageCount         '返回页码总数

  '/* RecordCount=MyPage.RecordCount     '返回记录总数

  '/* NextPage=MyPage.NextPage           '返回下页的页码

  '/* PrePage=MyPage.PrePage             '返回上一页的页码

  '/*****************************************************************

  Class PageClass

  Private Connection               '连接数据库的外部Connection对象

  Private Rs

  Private List_Fields

  Private Table_Name

  Private Query_Where

  Private OrderBy_SQL              '字段排序语句部分

  Private Page_Count               '返回当前查询的记录页总数

  Private Page_Size                '设置一页显示多少条的记录

  Private Cur_Page                 '设置当前的页码

  Private Record_Count             '返回当前查询的记录总数

  '/****************设置Connection对象****************************

  Public Property Let Conn(ByRef ObjConn)

  Set Connection=ObjConn

  End Property

  Public Property Get Conn()

  Set Conn=Connection

  End Property

  '/****************End******************************************

  '/****************设置查询SQL语句*******************************

  ''查询显示字段

  Public Property Let Fields(ByVal Value)

  List_Fields=Value

  End Property

  Public Property Get Fields()

  Fields=List_Fields

  End Property

  ''查询表名

  Public Property Let TableName(ByVal Value)

  Table_Name=Value

  End Property

  Public Property Get TableName()

  TableName=Table_Name

  End Property

  ''查询条件

  Public Property Let Condition(ByVal Value)

  Query_Where=Value

  End Property

  Public Property Get Condition()

  Condition=Query_Where

  End Property

  ''*****************排序部分********************************************

  ''Value 语不用写上Order By 。如: [object].OrderBy="ID Desc,PostTime Asc"

  Public Property Let OrderBy(ByVal Value)

  OrderBy_SQL=Value

  End Property

  Public Property Get OrderBy()

  OrderBy=OrderBy_SQL

  End Property

  '/****************End******************************************

  '/****************返回当前查询结果的总页数***********************

  Public Property Get PageCount()

  PageCount=Page_Count

  End Property

  Public Property Get RecordCount()

  RecordCount=Record_Count

  End Property

  Public Property Get NextPage()

  If Cur_Page<Page_Count Then

  NextPage=Cur_Page+1

  Else

  NextPage=Page_Count

  End If

  End Property

  Public Property Get PrePage()

  If Cur_Page>1 Then

  PrePage=Cur_Page-1

  Else

  PrePage=Cur_Page

  End If

  End Property

  '/****************End******************************************

  '/****************设置一页显示的记录数***************************

  Public Property Let PageSize(ByVal Value)

  If Not IsNumeric(Value) Or Value="" Then

  Value=10

  Else

  Value=Cint(Value)

  End If

  If Value<1 Then Value=10

  Page_Size=Value

  End Property

  Public Property Get PageSize()

  PageSize=Page_Size

  End Property

  ''设置当前的页码数**************************

  Public Property Let Page(ByVal Value)

  If Not IsNumeric(Value) Or Value="" Then

  Value=1

  Else

  Value=CLng(Value)

  End If

  If Value<1 Then Value=1

  Cur_Page=Value

  End Property

  Public Property Get Page()

  Page=Cur_Page

  End Property

  '/****************End******************************************

  Private Sub Class_Initialize

  '初始化RecordSet对象

  Page_Size=10            '默认一页为10条数据

  CurPage=1                   '默认当前为第一页

  Record_Count=0

  Page_Count=0

  End Sub

  Private Sub Class_Terminate

  Call CloseRecordSet

  End Sub

  '/***关闭数据库的连接*******

  Private Sub CloseRecordSet

  On Error Resume Next

  If IsObject(Rs) Then

  Rs.Close

  Set Rs=Nothing

  End If

  On Error Goto 0

  End Sub

  '/**********执行查询返回对应页码的数据***********************************************

  Public Function ExecuteBy(ByVal oTableName,ByVal oFields,ByVal oCondition,ByVal oOrderBy)

  Table_Name=oTableName

  List_Fields=oFields

  Query_Where=oCondtion

  OrderBy_SQL=oOrderBy

  Set ExecuteBy=Execute()

  End Function

  '查询并返回当前CurPage的页码记录

  Public Function Execute()

  Call CloseRecordSet

  On Error Resume Next

  Dim TSQL,TopMod,sWhere

  If Not IsObject(Connection) Or Table_Name="" Or OrderBy_SQL="" Then

  Set Execute=Nothing

  Record_Count=0

  Page_Count=0

  Exit Function

  End If

  If Trim(Query_Where)<>"" Then

  sWhere="Where "&Query_Where

  Else

  sWhere=""

  End If

  TSQL="Select Count(*) From ["&Table_Name&"] "&sWhere

  Record_Count=Connection.Execute(TSQL)(0)    '获取记录总数

  If Err Then

  Err.Clear

  Set Execute=Nothing

  Record_Count=0

  Page_Count=0

  Exit Function

  End If

  If Record_Count<1 Then

  Set Execute=Nothing

  Record_Count=0

  Page_Count=0

  Exit Function

  End If

  '取得页的总数

  If Record_Count Mod Page_Size <>0 Then

  TopMod=Record_Count Mod Page_Size

  Page_Count=Fix(Record_Count/Page_Size)+1

  If Cur_Page<Page_Count Then

  TopMod=Page_Size

  End If

  Else

  TopMod=Page_Size

  Page_Count=Fix(Record_Count/Page_Size)

  End If

  If Cur_Page>Page_Count Then Cur_Page=Page_Count

  If Cur_Page<1 Then Cur_Page=1

  If Trim(List_Fields)="" Then List_Fields="*"

  TSQL="Select * From (Select Top "&TopMod&" * From (Select Top "&(Cur_Page*Page_Size)&" "&List_Fields&" From ["&Table_Name&"] "&sWhere&" Order By "&OrderBy_SQL&") Order By "&TransformOrder(OrderBy_SQL)&")Order By "&OrderBy_SQL

  Set Rs=Connection.Execute(TSQL)

  If Err Then

  Err.Clear

  Set Execute=Nothing

  Record_Count=0

  Page_Count=0

  Exit Function

  End If

  Set Execute=Rs

  End Function

  '转换OrderBy的顺序 ASC->DESC   DESC->ASC

  Private Function TransformOrder(ByVal Value)

  If Value="" Then

  TransformOrder=""

  Exit Function

  End If

  Dim OrderArray,i,Result,ByString,Fields,InPos

  OrderArray=Split(Value,",")   '分解每个字段值

  For i=0 To Ubound(OrderArray)

  If OrderArray(i)<>"" Then

  InPos=InStrRev(Trim(OrderArray(i))," ")  '找出排序的顺序

  If InPos<1 Then  '如果找不到则是ASC排序

  ByString="ASC"

  Fields=OrderArray(i)+" "

  Else

  ByString=Trim(Mid(OrderArray(i),InPos+1))

  Fields=Left(OrderArray(i),InPos)

  If ByString<>"" Then

  ByString=UCase(ByString)

  Else

  ByString="ASC"

  End If

  End If

  ''转换排序

  If ByString="ASC" Then

  ByString="DESC"

  Else

  ByString="ASC"

  End If

  Result=Result+Fields+ByString+","

  End If

  Next

  If Result<>"" Then Result=Left(Result,Len(Result)-1)

  TransformOrder=Result

  End Function

  End Class

  '示例代码:

  Sub Show_List

  Dim Page,PageRs

  Page=Request("Page")

  Dim MyPage

  Set MyPage=New PageClass

  MyPage.Conn=Conn

  MyPage.PageSize=20

  MyPage.Page=Page

  MyPage.TableName="table1"

  MyPage.Fields="*"

  MyPage.OrderBy="ID Asc"

  Set PageRs=MyPage.Execute

  'Set PageRs=MyPage.ExecuteBy("table1","*","","ID Asc")

  If PageRs Is Nothing Then Exit Sub

  Do Until PageRs.Eof

  Response.Write " <tr bgcolor=""#FDFDFD"" style=""cursor:hand"" onmouseover=""this.style.background='#F3F3F3'"" onmouseout=""this.style.background='#FDFDFD'"">"

  Response.Write "    <td height=""20""><div align=""center"">"&PageRs("ID")&"</div></td>"

  Response.Write "    <td>"&PageRs("aaaa")&"</td>"

  Response.Write "    <td><a href="""&PageRs("bbbb")&"""><font color='#000000'>"&PageRs("bbbb")&"</font></a></td>"

  Response.Write "    <td>"&PageRs("cccc")&"</td>"

  Response.Write "  </tr>"

  PageRs.MoveNext

  Loop

  PageRs.Close

  PageCount=MyPage.PageCount

  Page=MyPage.Page            '取得当前正确的页码数

  NextPage=MyPage.NextPage

  PrePage=MyPage.PrePage

  Set PageRs=Nothing

  Set MyPage=Nothing

  End Sub

  Show_List

  %>