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
%>

(0)

相关推荐

  • asp的通用数据分页类

    (原创)<!--#include file="Conn.asp" --> 通用数据分页类     通用分页类,以后写分页显示数据时就轻松多啦.直接调用此类,然后再Execute即可以取得当前页的所有数据.     此类所做的工作是只取得当前页的数据,和总页数和总记录数等等数据. ASP代码: <% '/*****************************分页显示类************************** '/* 作者:哇哇鱼 '/* 日期:2004年

  • Asp.Net 通用数据操作类 (附通用数据基类)第1/2页

    文章内容为本站编辑,创作.你可以任意转载.发布.使用但请务必以明文标注文章原始出处及本声明 http://www.opent.cn  作者:浪淘沙此贴的方法会持续更新, 此文件要引用与数据操作的基类 using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.Web

  • 一个可查询所有表的“通用”查询分页类

    一个可查询所有表的"通用"查询分页类 最近突发奇想,希望写出一个可以针对所有表的查询分页类.因为在实际的开发中,恐怕查询并将结果集分页显示是用得最多的代码,而表的结构是多样的,我想尽可能地提高代码的重用率和维护性. 以下是我写的,请各位加以指点,测试,看能否进行更好的改进和更多的支持. 目前还只支持单一的表,不支持联合查询.但未来可以会考虑如何支持. 代码: <?php /******************************************************

  • Asp.Net 数据操作类(附通用数据基类)

    using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; namespace EC {

  • Access 2000 数据库 80 万记录通用快速分页类

    代码本人优化过,测试通过 主要思路: 用一条语句统计(Count)出记录数(而不在查询时获得 RecordCount 属性), 缓存在 Cookies 中, 跳转时就不用再次统计. 使用 ADO 的 AbsolutePage 属性进行页面跳转即可. 为方便调用而写成类, 代码主要地方已有说明 硬件环境: AMD Athlon XP 2600+, 256 DDR 软件环境: MS Windows 2000 Advanced Server + IIS 5.0 + Access 2000 + IE 6

  • C#、ASP.NET通用扩展工具类之LogicSugar

    说明一下性能方面 还可以接受 循环1000次普通Switch是用了0.001秒 ,扩展函数为0.002秒  , 如果是大项目在有负载均衡的情况下完全可以无视掉,小项目也不会计较这点性能了. 注意需要引用 "SyntacticSugar" 用法: //[Switch] string bookKey = "c#"; //以前写法 string myBook = ""; switch (bookKey) { case "c#": m

  • C#、ASP.NET通用扩展工具类之TypeParse

    用法: var int1 = "2".TryToInt();//转换为int失败返回0 var int2 = "2x".TryToInt(); var int3 = "2".TryToInt(1);//转换为int失败返回1 var int4 = "2x".TryToInt(1); var d1 = "2".TryToMoney(); //同上 var d2 = "2x".TryToMo

  • Asp.net 通用万级数据分页代码[修正下载地址]

    1.主题,Asp.net环境下,通用的数据分页(包括Oracle,SqlServer,DB2...) 很久以前,就想做一个通用点的数据分页组件,但苦于一直没有充足的时间,所以迟迟没有实现(当然,主要是因为有一定的难度,要处理视图状态,回传事件,自绘等...),"十一"期间,陪女朋友去了躺"湘西",白天游山玩水,晚上无事,吃吃当地的夜宵,无聊之际,google了一把Oracle的数据分页,竟然没有一个完整的关于Asp.net + Oracle数据分页的例子,要不就是有

  • PHP通用分页类page.php[仿google分页]

    page.php 复制代码 代码如下: <?php /** ** 通用php分页类.(仿Google样式) ** 只需提供记录总数与每页显示数两个参数.(已附详细使用说明..) ** 无需指定URL,链接由程序生成.方便用于检索结果分页. ** 表单采用GET方法提交,可保证在诸如查询之,删除之类的操作时,不丢失URL参数 **/ class Pager{ //IE地址栏地址 var $url; //记录总条数 var $countall; //总页数 var $page; //分页数字链接 v

  • 创建一个ASP通用分页类

    从开始学习到使用ASP到现在也写了不少程序了,最令人头痛的是写数据分页,每次都是由于几个变量名或几个参数的不同,因而需要每次都写哪一段冗长而又繁杂的分页代码,代码长了使得程序的可读性变差,容易出差,调试半天也找不出错在哪里,所以慢慢的我开始使用一些网上的提供的分页函数或分页类.的确省事不少,但是通常的函数和类的做法都是就数据显示部分也封装了起来,每次为了达到自己需要的显求效果要去改动函数或者类的本身,所以使用起来也不是怎么方便,自己写的分页改起来已经够复杂了,更不要说别人的了. 所以趁昨天有空自

随机推荐