0

0

Access2000数据库80万记录通用快速分页类

php中文网

php中文网

发布时间:2016-06-07 15:12:22

|

1032人浏览过

|

来源于php中文网

原创

主要思路: 用一条语句统计(Count)出 记录 数(而不在查询时获得 RecordCount 属性), 缓存在 Cookies 中, 跳转时就不用再次统计. 使用 ADO 的 AbsolutePage 属性进行页面跳转即可. 为方便调用而写成类, 代码主要地方已有说明 硬件环境: AMD Athlon XP 2600+, 2

    主要思路: 用一条语句统计(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 = "../db/test.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     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    If sintRecordCount mod sintPageSize = 0 Then
    sintPageMax = sintRecordCount \ sintPageSize
   Else
    sintPageMax = sintRecordCount \ sintPageSize + 1
   End If
   If sintPageNow > sintPageMax Then sintPageNow = sintPageMax
  
   If sintPageNow     sstrPageInfo = "首页 上一页"
   Else
    sstrPageInfo = sstrPageInfo & " 首页"
    sstrPageInfo = sstrPageInfo & " 上一页"
   End If
  
   If sintPageMax - sintPageNow     sstrPageInfo = sstrPageInfo & " 下一页 末页 "
   Else
    sstrPageInfo = sstrPageInfo & " 下一页 "
    sstrPageInfo = sstrPageInfo & " 末页 "
   End If
  
   sstrPageInfo = sstrPageInfo & " 页次:" & sintPageNow & " / " & sintPageMax & " "
   sstrPageInfo = sstrPageInfo & " 共 " & sintRecordCount & "记录 " & sintPageSize & " 条/页 "
  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 = "[myTable]"
  clsRecordInfo.strPageUrl = strLocalUrl
  clsRecordInfo.strFieldsList = "[ID], [Title], [LastTime]"
  clsRecordInfo.strCondiction = "[ID]   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
%>



相关专题

更多
php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

65

2025.12.31

php网站源码教程大全
php网站源码教程大全

本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

43

2025.12.31

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

35

2025.12.31

不受国内限制的浏览器大全
不受国内限制的浏览器大全

想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

41

2025.12.31

出现404解决方法大全
出现404解决方法大全

本专题整合了404错误解决方法大全,阅读专题下面的文章了解更多详细内容。

204

2025.12.31

html5怎么播放视频
html5怎么播放视频

想让网页流畅播放视频?本合集详解HTML5视频播放核心方法!涵盖<video>标签基础用法、多格式兼容(MP4/WebM/OGV)、自定义播放控件、响应式适配及常见浏览器兼容问题解决方案。无需插件,纯前端实现高清视频嵌入,助你快速打造现代化网页视频体验。

9

2025.12.31

关闭win10系统自动更新教程大全
关闭win10系统自动更新教程大全

本专题整合了关闭win10系统自动更新教程大全,阅读专题下面的文章了解更多详细内容。

8

2025.12.31

阻止电脑自动安装软件教程
阻止电脑自动安装软件教程

本专题整合了阻止电脑自动安装软件教程,阅读专题下面的文章了解更多详细教程。

3

2025.12.31

html5怎么使用
html5怎么使用

想快速上手HTML5开发?本合集为你整理最实用的HTML5使用指南!涵盖HTML5基础语法、主流框架(如Bootstrap、Vue、React)集成方法,以及无需安装、直接在线编辑运行的平台推荐(如CodePen、JSFiddle)。无论你是新手还是进阶开发者,都能轻松掌握HTML5网页制作、响应式布局与交互功能开发,零配置开启高效前端编程之旅!

2

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 6.4万人学习

Django 教程
Django 教程

共28课时 | 2.6万人学习

Excel 教程
Excel 教程

共162课时 | 10.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号