asp的通用数据分页类
            网络编程 发布日期:2025/10/31 浏览次数:1
         
        
            正在浏览: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 
%>