动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > ASP技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ ASP技巧 ]的信息

本月文章推荐
.ASP Session对象的集合以及属性方.
.如何尽快释放掉Connection对象建.
.自己写的一个简单ASP调用存储过程.
.如何用ASP编写网站统计系统三.
.关于页面和代码分离.
.提高ASP性能的最佳选择(二).
.网页加速处理-页面减肥与减化.
.数 据 库 设 计 经 验 谈.
.利用global.asp定时执行ASP.
.用PreRender解决DataGrid分页最后.
.ASP中函数调用对参数的影响.
.在PPC上实现编译ASP.
.ASP与Oracle连接时的TNS错误 .
.在ASP程序中实现数据库事务控制.
.将ado方便的转化为XML文件.
.实现聊天室在线人员无刷新所需要.
.在ASP中过滤用户输入 提高安全性.
.如何使用asp创建dsn.
.关于释放session的两篇文章(二).
.透过ASP修改NT使用者的密码.

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

发表日期:2005-1-18 |


    主要思路: 用一条语句统计(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 字段作了索引也没用. :(
<%@LANGUAGE = "VBScript" CODEPAGE="936"%>
<%Option Explicit%>
<%
 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 < 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 = "[myTable]"
  clsRecordInfo.strPageUrl = strLocalUrl
  clsRecordInfo.strFieldsList = "[ID], [Title], [LastTime]"
  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>

上一篇:ASP中取得图片宽度和高度的类(无组件) 人气:12407
下一篇:模仿PHP写的ASP分页 人气:11676
浏览全部asp的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-12 team论坛 v2.0.4 bulid 080916 A
2008-10-12 Roclog v3.1.6
2008-10-12 SupeV v1.0.1 简体中文 GBK
2008-10-12 NetCMS v1.6.0.1010 正式版
2008-10-12 PHP考试系统PPFrame v1.2.7
2008-10-12 LPAS个人相册 v1.6.3
2008-10-12 快问仿百度知道系统 动态-静态-互
2008-10-12 方卡广告防点击系统 V1.0 GB2312
2008-10-12 泡菜内容管理系统[PCMS] v1.0 Bu
2008-10-11 联系人分组工具 v1.1 中文破解版
2008-10-11 FaceMelter变脸 v2.0 汉化破解版
2008-10-11 PathTracker道路跟踪仪 v1.2 破解
2008-10-11 Rooms手机聊天室 v0.6.7 破解版
2008-10-11 RemoteDesktop远程桌面 v1.0 破解
2008-10-11 ProRemote远程调音台 v1.0.1 破解
2008-10-11 PicShare照片共享 v1.0.0 破解版
2008-10-11 Photogene照片编辑器 v1.5 汉化破
2008-10-11 WriteRoom共享文档 v1.0 破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成