查询翻页优化第1/2页

代码如下:

<SCRIPT language=VBSCRIPT RUNAT=SERVER>

'//---- COCOON_自定义类_翻页优化代码 ----//'
Class cc_db_Pager
    '--------------------------------
    '     COCOON Db_Pager 类 (Ver: 1.02)
    '     作者: Sunrise_Chen (sunrise_chen@msn.com)
    '     请保留此信息,谢谢。
    '     
    '     2003/06 修正一个错误,描述:如果ID不唯一,将产生多条重复记录的错误。
    '                           2003.5
    '--------------------------------

'//-------------------- 定义变量 --------------------//'
    Private sTableName        '//表名
    Private sSqlString        '//自定义Sql语句
    Private aCondition()        '//查询条件(数组)
    Private sCondition        '//查询条件(字符串)
    Private iPage        '//当前页码
    Private iPageSize        '//每页记录数
    Private iPageCount        '//总页数
    Private iRecCount        '//当前查询条件下的记录数
    Private iTotalRecCount    '//总记录数
    Private sFields        '//输出的字段名
    Private sOrderBy        '//排序字符串
    Private sSql        '//当前的查询语句
    Private sPkey        '//主键
    Private oConn        '//连接对象
    Private iDefPageSize        '//默认每页显示的记录数
    Private sProjectName        '/项目名
    Private sVersion        '/版本号
    Private bShowError        '//是否显示错误信息

'//-------------------- 事件、方法 --------------------//'
    '//类初始化事件
    Private Sub Class_Initialize()
        ReDim aCondition(-1)
        iPage        = 1
        iRecCount        = Null
        iTotalRecCount    = Null
        iPageCount        = Null
        bShowError        = True
        iPageSize        = 10
        sFields        = "*"
        sPkey        = "ID"
        sCondition        = ""
        sOrderBy        = ""
        sSqlString        = ""
        sProjectName    = "COCOON 类系列 数据库翻页优化"
        sVersion        = "1.02"
    End Sub

'//类结束事件
    Private Sub Class_Terminate()
        Set oConn = Nothing
    End Sub

'//错误处理
    Public Sub doError(s)
            Dim sTmp
            sTmp = CLng(Rnd() * 100)
            Response.write( "<DIV STYLE='WIDTH:760;font-size:9pt;cursor:hand'>" )
            Response.write( "<LABEL ONCLICK='ERRORDIV"&sTmp&".style.display=(ERRORDIV"&sTmp&".style.display==""""?""none"":"""")'>" )
            Response.write( "<SPAN STYLE='BACKGROUND-COLOR:#CCCC00;COLOR:WHITE;'>〖 CC_db_Pager 提示信息 〗</SPAN><BR></LABEL>" )
            Response.write( "<DIV ID='ERRORDIV"&sTmp&"' STYLE='DISPLAY:NONE;WIDTH:100%;" )
            Response.write( "BORDER: 1PX SOLID #CCCC00;PADDING:5;overflow:hidden;text-overflow:ellipsis;'><NOBR>" )
            Response.write( "<SPAN STYLE='COLOR:RED'>Description</SPAN>: " & s & "<BR>" )
            Response.write( "<SPAN STYLE='COLOR:RED'>Provider</SPAN>: " & sProjectName )
            Response.write( "  <SPAN STYLE='COLOR:RED'>Version</SPAN>: " & sVersion & "<BR>" )
            Response.write( "</NOBR></DIV></DIV><BR>" )
    End Sub

'//产生分页的SQL语句
    Public Function getSql()
        Dim iStart, iEnd
        Call makeCondition()
        iStart = ( iPage - 1 ) * iPageSize
        iEnd = iStart + iPageSize
        getSql  = " SELECT DISTINCT " & sFields & " FROM ["&sTableName&"] " _
                & " WHERE ["&sPKey&"] NOT IN ( " _
                & "   SELECT TOP "&iStart&" ["&sPKey&"] FROM ["&sTableName&"] " & sCondition & " " & sOrderBy & " " _
                & " )" _
                & " AND ["&sPKey&"] IN ( " _
                & "   SELECT TOP "&iEnd&" ["&sPKey&"] FROM ["&sTableName&"] " & sCondition & " " & sOrderBy & " " _
                & " )" _
                & " " & sOrderBy & " "
    End Function

'//产生条件字符串
    Private Sub makeCondition()
        If UBound(aCondition)>=0 Then
            sCondition = " WHERE " & Join(aCondition, " AND ")
        End If
    End Sub

'//计算总记录数(带条件)
    Private Sub CaculateRecCount()
        On Error Resume Next
        Dim oRs
        Call makeCondition()
        Set oRs = oConn.Execute( "SELECT COUNT(["&sPKey&"]) FROM [" & sTableName & "]" & sCondition )
        If Err Then
            doError Err.Description
            Response.End()
        End If
        iRecCount = oRs.Fields.Item(0).Value
        Set oRs = Nothing
    End Sub

'//计算总记录数(不带条件)
    Private Sub CaculateTotalRecCount()
        On Error Resume Next
        Dim oRs
        Set oRs = oConn.Execute( "SELECT COUNT(["&sPKey&"]) FROM [" & sTableName & "]" )
        If Err Then
            doError Err.Description
            Response.End()
        End If
        iTotalRecCount = oRs.Fields.Item(0).Value
        Set oRs = Nothing
    End Sub

'//计算页数
    Private Sub CaculatePageCount()
        If isNull(iRecCount) Then CaculateRecCount()
        If iRecCount = 0 Then iPageCount = 0 : Exit Sub
        iPageCount = Abs( Int( 0 - (iRecCount / iPageSize) ) )
    End Sub

'//增加条件
    Public Sub AddCondition(s)
        If Len(s)<0 Then Exit Sub
        ReDim Preserve aCondition(UBound(aCondition)+1)
        aCondition(UBound(aCondition)) = s
    End Sub

'//版本信息
    Public Function Information()
        doError "Coding by <A HREF='MAILTO:sunrise_chen@msn.com'>Sunrise_Chen</A> @ <A HREF='http://www.ccopus.com'>http://www.ccopus.com</A> ."
    End Function

'//-------------------- 输入属性 --------------------//'
    '//定义连接对象
    Public Property Set ActiveConnection(o)
        Set oConn = o
    End Property

'//定义查询表名
    Public Property Let TableName(s)
        sTableName = s
    End Property

'//定义需要输出的字段名
    Public Property Let Fields(s)
        sFields = s
    End Property

'//定义主键
    Public Property Let Pkey(s)
        sPkey = s
    End Property

'//定义排序规则
    Public Property Let OrderBy(s)
        sOrderBy = " ORDER BY " & s & " "
    End Property

'//定义每页的记录条数 
    Public Property Let PageSize(s)
        iPageSize = s
        If Not isNumeric(iPageSize) Then iPageSize = iDefaultPageSize
        If CLng(iPageSize)<1 Then iPageSize = iDefaultPageSize
    End Property

'//定义当前页码
    Public Property Let Page(s)
        iPage = s
        If Not isNumeric(iPage) Then iPage = 1
        If CLng(iPage)<1 Then iPage = 1
        Call CaculatePageCount()
        If CLng(iPage)>CLng(iPageCount) And iPageCount>0 Then iPage = iPageCount
    End Property

'//自定义查询语句
    Public Property Let Sql(s)
        sSqlString = s
    End Property

'//-------------------- 输出属性 --------------------//'
    '//取得当前条件下的记录数
    Public Property Get RecordCount
        If isNull(iRecCount) Then CaculateRecCount()
        RecordCount = iRecCount
    End Property

'//取得当前页码
    Public Property Get Page
        Page = iPage
    End Property

'//取得当前页码
    Public Property Get AbsolutePage
        AbsolutePage = iPage
    End Property

'//取得当前查询的条件
    Public Property Get Condition
        If Len(sCondition)<1 Then makeCondition()
        Condition = sCondition
    End Property

'//取得总的记录数
    Public Property Get TotalRecordCount
        If isNull(iTotalRecCount) Then CaculateTotalRecCount()
        TotalRecordCount = iTotalRecCount
    End Property

'//取得总页数
    Public Property Get PageCount
        If isNull(iPageCount) Then CaculatePageCount()
        PageCount = iPageCount
    End Property

'//得到分页后的记录集
    Public Property Get Recordset
        On Error Resume Next
        sSql = getSql()
        Set Recordset = oConn.Execute( sSql )
        If Err Then
            If bShowError Then doError Err.Description
            If Len(sSqlString)>0 Then
                Set Recordset = oConn.Execute( sSqlString )
                If Err Then
                    doError Err.Description
                    Response.End()
                End If
            Else
                doError Err.Description
            End If
        End If
        Err.Clear()
    End Property

'//版本信息
    Public Property Get Version
        Version = sVersion
    End Property

End Class

</SCRIPT>

当前1/2页 12下一页阅读全文

(0)

相关推荐

  • 查询翻页优化第1/2页

    复制代码 代码如下: <SCRIPT language=VBSCRIPT RUNAT=SERVER> '//---- COCOON_自定义类_翻页优化代码 ----//' Class cc_db_Pager     '--------------------------------     '     COCOON Db_Pager 类 (Ver: 1.02)     '     作者: Sunrise_Chen (sunrise_chen@msn.com)     '     请保留此信息,

  • SQL Server 聚焦存储过程性能优化、数据压缩和页压缩提高IO性能方法(一)

    前言 关于SQL Server基础系列尚未结束,还剩下最后一点内容未写,后面会继续.有园友询问我什么时候开始写SQL Server性能系列,估计还得等一段时间,最近工作也比较忙,但是会陆陆续续的更新SQL Server性能系列,本篇作为性能系列的基本引导,让大家尝尝鲜.在涉及到SQL Server性能优化时,我看到的有些文章就是一上来列出SQL Server的性能优化条例,根本没有弄清楚为什么这么做,当然也有可能是自己弄懂了,只是作为备忘录,但是到了我这里,我会遵循不仅仅是备忘录,还要让各位园友

  • Android启动页优化之实现应用秒开

    Android 应用冷启动时,需要从Application开始启动,加载时间就会比较长,这段时间里,用户所能看到的就是"白屏"(这是因为默认的AppTheme的 android:windowBackground 默认是设置成白色的),因此我认为真正的启动页就应该是让用户点开应用时看到的不是"白屏",而是我们创建的一个页面,可以是一张图片.一段文字. 这样,不明真相的用户直观感觉到的就是,这个应用可以秒开. 1.首先在 drawable 目录下新建一个 splash_

  • Python实现SqlServer查询结果并写入多个Sheet页的方法详解

    目录 1.引言 2.代码实战 2.1 openpyxl写入excel 2.2 pandas写入excel 3.总结 1.引言 小丝:鱼哥,我想请教一个问题. 小鱼:国庆假期你经历了什么,让你变得如此的 “善良”? 小丝:别这么说,我一直很善良,至少,很正直… 小鱼:打住,直接点, 你有什么需要帮助的? 小丝:我就是想把查询的结果也入到excel表中 小鱼:然后呢? 小丝:sqlserver数据库. 小鱼:…好吧,还有其他要求吗? 小丝:没有了. 小鱼:OK,我就花费几分钟,给你整一个. 2.代码

  • MySQL百万级数据量分页查询方法及其优化建议

    数据库SQL优化是老生常谈的问题,在面对百万级数据量的分页查询,又有什么好的优化建议呢?下面将列举了一些常用的方法,供大家参考学习! 方法1: 直接使用数据库提供的SQL语句 语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N 适应场景: 适用于数据量较少的情况(元组百/千级) 原因/缺点: 全表扫描,速度会很慢 且 有的数据库结果集返回不稳定(如某次返回1,2,3,另外的一次返回2,1,3). Limit限制的是从结果集的M位置处取出N条输出,其余

  • Vue 列表页带参数进详情页的操作(router-link)

    首先,仔细看文档!!!一点一点的踩坑过来的~~~ 这里介绍params和query两种方法 1.用params传参 列表页: <router-link :to="{ name:'msgDetail', params: {id: item.msg_id} }">(注意:用params传参这里是命名路由,用name) </router-link> 路由配置如下: export default new Router({ routes: [ { path: '/msgD

  • asp.net新闻列表生成静态页之批量和单页生成

    大家都知道,生成静态页的方法有两种,第一种是使用C#在后台硬编码,第二种是读取模板文件,使用字符串代替.总体来讲第一种方法代码量比较大,维护起来有点困难.生成静态页的目的是为了提高用户体验度,加快访问速度. 使用静态页面还有如下好处: 1. 安全:使用静态页面,用户访问的使没有任何操作功能的html页面,可以说从安全性方面大大提高了程序及服务器的安全. 2. 快速:用户访问的是提前生成好的静态页面,使用户对页面的请求瓶颈只受IO的限制而不会有其他方面的影响. 3. 降低服务器,数据库负载:因为用

  • jQuery+Ajax请求本地数据加载商品列表页并跳转详情页的实现方法

    效果: json文件: { "books":[ {"id":1,"imgUrl":"images/ly.jpg","price":"45.00","title":"论语","publish":"人民文学出版社","num":"303","desc":

  • Mysql根据时间查询日期的优化技巧

    例如查询昨日新注册用户,写法有如下两种: EXPLAIN select * from chess_user u where DATE_FORMAT(u.register_time,'%Y-%m-%d')='2018-01-25'; EXPLAIN select * from chess_user u where u.register_time BETWEEN '2018-01-25 00:00:00' and '2018-01-25 23:59:59'; register_time字段是date

  • vue 如何从单页应用改造成多页应用

    最近接到这样一个需求,将之前的三个项目合并成一个,并且要做成后台可配置化,前端动态引入组件的模板化框架. 听起来是不是很拗口...我自己当时都蒙了. 简单分析下需求,就是,项目A/B/C的内容是交叉的,有的页面不同,有的页面和组件是公用的,例如A项目多了个人中心及其里面所有内容(最全的一个项目,但是是放在微信中的,需要获取微信授权),B项目是通用版的项目(也就是说可以放在微信,也可以放在app内,不需要获取授权之类的.),C项目是A/B项目中共有的一个页面功能抽取出来了. 所以有的时候比如说这块

随机推荐