• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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.0 
    测试结果: 初次运行在 250(首页) - 400(末页)毫秒, (记录数缓存后)在页面间跳转稳定在 47 毫秒以下.第1页跳到最后一页不多于 350 毫秒 

    适用范围: 用于普通分页. 不适用于有较复杂的查询时: 如条件为"[Title] Like ’%最爱%’", 查询的时间大大增加, 就算 Title 字段作了索引也没用. :( 

    %
    Dim intDateStart
    intDateStart = Timer()

    Rem ## 打开数据库连接
    Rem #################################################################
    function f__OpenConn()
    Dim strDbPath
    Dim connstr
    strDbPath = "fenye/db.mdb"
    connstr  = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
    connstr  = connstr  Server.MapPath(strDbPath)
    Set conn  = Server.CreateObject("Adodb.Connection")
    conn.open connstr
    End function
    Rem #################################################################

    Rem ## 关闭数据库连接
    Rem #################################################################
    function f__CloseConn()
    If IsObject(conn) Then
    conn.close
    End If
    Set conn = nothing
    End function
    Rem #################################################################
    Rem 获得执行时间
    Rem #################################################################
    function getTimeOver(iflag)
    Dim tTimeOver
    If iflag = 1 Then
    tTimeOver = FormatNumber(Timer() - intDateStart, 6, true)
    getTimeOver = " 执行时间: "  tTimeOver  " 秒"
    Else
    tTimeOver = FormatNumber((Timer() - intDateStart) * 1000, 3, true)
    getTimeOver = " 执行时间: "  tTimeOver  " 毫秒"
    End If
    End function
    Rem #################################################################
    Class Cls_PageView
    Private sbooInitState
    Private sstrCookiesName
    Private sstrPageUrl
    Private sstrPageVar
    Private sstrTableName
    Private sstrFieldsList
    Private sstrCondiction
    Private sstrOrderList
    Private sstrPrimaryKey
    Private sintRefresh

    Private sintRecordCount
    Private sintPageSize
    Private sintPageNow
    Private sintPageMax

    Private sobjConn

    Private sstrPageInfo

    Private Sub Class_Initialize
    Call ClearVars()
    End Sub

    Private Sub class_terminate()
    Set sobjConn = nothing
    End Sub

    Public Sub ClearVars()
    sbooInitState = False
    sstrCookiesName = ""
    sstrPageUrl = ""
    sstrPageVar = "page"
    sstrTableName = ""
    sstrFieldsList = ""
    sstrCondiction = ""
    sstrOrderList = ""
    sstrPrimaryKey = ""
    sintRefresh = 0

    sintRecordCount = 0
    sintPageSize = 0
    sintPageNow = 0
    sintPageMax = 0
    End Sub

    Rem ## 保存记录数的 Cookies 变量
    Public Property Let strCookiesName(Value)
    sstrCookiesName = Value
    End Property

    Rem ## 转向地址
    Public Property Let strPageUrl(Value)
    sstrPageUrl = Value
    End Property

    Rem ## 表名
    Public Property Let strTableName(Value)
    sstrTableName = Value
    End Property

    Rem ## 字段列表
    Public Property Let strFieldsList(Value)
    sstrFieldsList = Value
    End Property

    Rem ## 查询条件
    Public Property Let strCondiction(Value)
    If Value > "" Then
    sstrCondiction = " WHERE "  Value
    Else
    sstrCondiction = ""
    End If
    End Property

    Rem ## 排序字段, 如: [ID] ASC, [CreateDateTime] DESC
    Public Property Let strOrderList(Value)
    If Value > "" Then
    sstrOrderList = " ORDER BY "  Value
    Else
    sstrOrderList = ""
    End If
    End Property

    Rem ## 用于统计记录数的字段
    Public Property Let strPrimaryKey(Value)
    sstrPrimaryKey = Value
    End Property

    Rem ## 每页显示的记录条数
    Public Property Let intPageSize(Value)
    sintPageSize = toNum(Value, 20)
    End Property

    Rem ## 数据库连接对象
    Public Property Let objConn(Value)
    Set sobjConn = Value
    End Property

    Rem ## 当前页
    Public Property Let intPageNow(Value)
    sintPageNow = toNum(Value, 1)
    End Property

    Rem ## 页面参数
    Public Property Let strPageVar(Value)
    sstrPageVar = Value
    End Property

    Rem ## 是否刷新. 1 为刷新, 其他值则不刷新
    Public Property Let intRefresh(Value)
    sintRefresh = toNum(Value, 0)
    End Property

    Rem ## 获得当前页
    Public Property Get intPageNow()
    intPageNow = singPageNow
    End Property

    Rem ## 分页信息
    Public Property Get strPageInfo()
    strPageInfo = sstrPageInfo
    End Property

    Rem ## 取得记录集, 二维数组或字串, 在进行循环输出时必须用 IsArray() 判断
    Public Property Get arrRecordInfo()
    If Not sbooInitState Then
    Exit Property
    End If

    Dim rs, sql
    sql = "SELECT "  sstrFieldsList  _
    " FROM "  sstrTableName  _
    sstrCondiction  _
    sstrOrderList

    Set rs = Server.CreateObject("Adodb.RecordSet")
    rs.open sql, sobjConn, 1, 1
    If Not(rs.eof or rs.bof) Then
    rs.PageSize = sintPageSize
    rs.AbsolutePage = sintPageNow
    If Not(rs.eof or rs.bof) Then
    arrRecordInfo = rs.getrows(sintPageSize)
    Else
    arrRecordInfo = ""
    End If
    Else
    arrRecordInfo = ""
    End If
    rs.close
    Set rs = nothing
    End Property

    Rem ## 初始化记录数
    Private Sub InitRecordCount()
    sintRecordCount = 0
    If Not(sbooInitState) Then Exit Sub
    Dim sintTmp
    sintTmp = toNum(request.Cookies("_xp_"  sstrCookiesName), -1)
    If ((sintTmp  0) Or (sintRefresh = 1))Then
    Dim sql, rs
    sql = "SELECT COUNT("  sstrPrimaryKey  ")"  _
    " FROM "  sstrTableName  _
    sstrCondiction
    Set rs = sobjConn.execute(sql)
    If rs.eof or rs.bof Then
    sintTmp = 0
    Else
    sintTmp = rs(0)
    End If
    sintRecordCount = sintTmp

    response.Cookies("_xp_"  sstrCookiesName) = sintTmp
    Else
    sintRecordCount = sintTmp
    End If
    End Sub

    Rem ## 初始化分页信息
    Private Sub InitPageInfo()
    sstrPageInfo = ""
    If Not(sbooInitState) Then Exit Sub

    Dim surl   
    surl = sstrPageUrl   
    If Instr(1, surl, "?", 1) > 0 Then
    surl = surl  ""  sstrPageVar  "="
    Else
    surl = surl  "?"  sstrPageVar  "="
    End If

    If sintPageNow = 0 Then sintPageNow = 1
    If sintRecordCount mod sintPageSize = 0 Then
    sintPageMax = sintRecordCount \&;sintPageSize
    Else
    sintPageMax = sintRecordCount \&;sintPageSize + 1
    End If
    If sintPageNow > sintPageMax Then sintPageNow = sintPageMax

    If sintPageNow = 1 then
    sstrPageInfo = "首页 上一页"
    Else
    sstrPageInfo = sstrPageInfo  " a href="""  surl  "1"">首页/a>"
    sstrPageInfo = sstrPageInfo  " a href="""  surl  (sintPageNow - 1)  """>上一页/a>"
    End If

    If sintPageMax - sintPageNow  1 then
    sstrPageInfo = sstrPageInfo  " 下一页 末页 "
    Else
    sstrPageInfo = sstrPageInfo  " a href="""  surl  (sintPageNow + 1)  """>下一页/a> "
    sstrPageInfo = sstrPageInfo  " a href="""  surl  sintPageMax  """>末页/a> "
    End If

    sstrPageInfo = sstrPageInfo  " 页次:strong>font color=""#990000"">"  sintPageNow  "/font> / "  sintPageMax  " /strong>"
    sstrPageInfo = sstrPageInfo  " 共 strong>"  sintRecordCount  "/strong> 条记录 strong>"  sintPageSize  "/strong> 条/页 "
    End Sub

    Rem ## 长整数转换
    Private function toNum(s, Default)
    s = s  ""
    If s > "" And IsNumeric(s) Then
    toNum = CLng(s)
    Else
    toNum = Default
    End If
    End function

    Rem ## 类初始化
    Public Sub InitClass()
    sbooInitState = True
    If Not(IsObject(sobjConn)) Then sbooInitState = False
    Call InitRecordCount()
    Call InitPageInfo()   
    End Sub
    End Class


    Dim strLocalUrl
    strLocalUrl = request.ServerVariables("SCRIPT_NAME")

    Dim intPageNow
    intPageNow = request.QueryString("page")

    Dim intPageSize, strPageInfo
    intPageSize = 30

    Dim arrRecordInfo, i
    Dim Conn
    f__OpenConn
    Dim clsRecordInfo
    Set clsRecordInfo = New Cls_PageView

    clsRecordInfo.strTableName = "[table1]"
    clsRecordInfo.strPageUrl = strLocalUrl
    clsRecordInfo.strFieldsList = "[ID], [aaaa], [bbbb], [cccc]"
    clsRecordInfo.strCondiction = "[ID]  10000"
    clsRecordInfo.strOrderList = "[ID] ASC"
    clsRecordInfo.strPrimaryKey = "[ID]"
    clsRecordInfo.intPageSize = 20
    clsRecordInfo.intPageNow = intPageNow

    clsRecordInfo.strCookiesName = "RecordCount"
    clsRecordInfo.strPageVar = "page"

    clsRecordInfo.intRefresh = 0
    clsRecordInfo.objConn = Conn
    clsRecordInfo.InitClass

    arrRecordInfo = clsRecordInfo.arrRecordInfo
    strPageInfo = clsRecordInfo.strPageInfo
    Set clsRecordInfo = nothing
    f__CloseConn
    %>
    html>
    head>
    meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    title>分页测试/title>
    style type="text/css">
    !--
    .PageView {
    font-size: 12px;
    }
    .PageView td {
    border-right-style: solid;
    border-bottom-style: solid;
    border-right-color: #E0E0E0;
    border-bottom-color: #E0E0E0;
    border-right-width: 1px;
    border-bottom-width: 1px;
    }
    .PageView table {
    border-left-style: solid;
    border-top-style: solid;
    border-left-color: #E0E0E0;
    border-top-color: #E0E0E0;
    border-top-width: 1px;
    border-left-width: 1px;
    }
    tr.Header {
    background: #EFF7FF;
    font-size: 14px;
    font-weight: bold;
    line-height: 120%;
    text-align: center;
    }
    -->
    /style>
    style type="text/css">
    !--
    body {
    font-size: 12px;
    }
    a:link {
    color: #993300;
    text-decoration: none;
    }
    a:visited {
    color: #003366;
    text-decoration: none;
    }
    a:hover {
    color: #0066CC;
    text-decoration: underline;
    }
    a:active {
    color: #000000;
    text-decoration: none;
    }
    table {
    font-size: 12px;
    }
    -->
    /style>
    /head>
    body>
    table width="100%" border="0" cellspacing="0" cellpadding="4">
      tr>
      td>nbsp;%= strPageInfo%>/td>
    /tr>
    /table>
    div class="PageView">
      table width="100%" border="0" cellspacing="0" cellpadding="4">
        tr class="Header"> 
        td>ID/td>
        td>描述/td>
        td>日期/td>
      /tr>
    %
      If IsArray(arrRecordInfo) Then
       For i = 0 to UBound(arrRecordInfo, 2)
    %>
      tr>
        td>nbsp;%= arrRecordInfo(0, i)%>/td>
        td>nbsp;%= arrRecordInfo(1, i)%>/td>
        td>nbsp;%= arrRecordInfo(2, i)%>/td>
      /tr>
    %
       Next
      End If
    %>
    /table>
    /div>
    table width="100%" border="0" cellspacing="0" cellpadding="4">
      tr> 
      td>nbsp;%= strPageInfo%>/td>
    /tr>
    /table>
    table width="100%" border="0" cellspacing="0" cellpadding="4">
      tr> 
        td align="center">nbsp;%= getTimeOver(1)%>/td>
      /tr>
    /table>
    /body>
    /html>
    您可能感兴趣的文章:
    • 浅谈mssql access数据库 top分页方法
    • Asp.net在线备份、压缩和修复Access数据库示例代码
    • ASP.NET 连接ACCESS数据库的简单方法
    • asp.net中获取新增加记录的ID Access版
    • asp.net下Oracle,SQL Server,Access万能数据库通用类
    • 一个简答的Access下的分页asp.net代码
    • asp.net访问Access数据库溢出错误
    • asp.net(C#) Access 数据操作类
    • asp.net access web.config denied
    • asp.net 数据库备份还原(sqlserver+access)
    • asp.net access添加返回自递增id的实现方法
    • asp.net和asp下ACCESS的参数化查询
    • asp.net实现access数据库分页的方法
    上一篇:asp的通用数据分页类
    下一篇:ASP中取得图片宽度和高度的类(无组件)
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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