asp 通用分页类

<%@LANGUAGE = "VBScript" CODEPAGE="936"%>
<%Option Explicit%>

<!--#include file="Cls_PageView.asp"-->
Class Cls_PageView
 Private sbooInitState
 Private sstrPageUrl
 Private sstrPageVar
 Private sstrSql
 Private sstrSqlCount

 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
  sstrPageUrl = ""
  sstrPageVar = "page"

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

 Private Sub ClearMainVars()
  sstrSql = ""
 End Sub

 Rem ## SQL语句
 Public Property Let strSQL(Value)
  sstrSql = Value
 End Property

 Rem ## SQL语句
 Public Property Let strSQLCount(Value)
  sstrSqlCount = Value
 End Property

 Rem ## 转向地址
 Public Property Let strPageUrl(Value)
  sstrPageUrl = 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 intRecordCount(Value)
  sintRecordCount = toNum(Value, -1)
  If sintRecordCount < 0 Then sintRecordCount = -1
 End Property

 Rem ## 页面参数
 Public Property Let strPageVar(Value)
  sstrPageVar = Value
 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()
  Call InitClass()
  If Not sbooInitState Then
   Response.Write("分页类初始化失败, 请检查各参数情况")
   Exit Property
  End If

  Dim rs, sql
  sql = sstrSql

  Set rs = Server.CreateObject("Adodb.RecordSet")

  Rem 若记录数统计语句不为空, 则取语句执行后第一个字段值作为记录数
  If sstrSqlCount <> "" Then
   rs.Open sstrSqlCount, sobjConn, 1, 1
   If Not(rs.eof or rs.bof) Then
    sintRecordCount = rs(0)
   Else
    sintRecordCount = 0
   End If
   rs.Close
  End If

  rs.open sql, sobjConn, 1, 1

  Rem 若无记录统计语句且未设定记录总数, 则由记录集RecordCount属性得出.
  If sintRecordCount < 0 Then
   sintRecordCount = rs.RecordCount
  End If
  If sintRecordCount < 0 Then sintRecordCount = 0

  '生成分页信息
  Call InitPageInfo()

  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

  Call ClearMainVars()
 End Property

 Rem ## 初始化分页信息
 Private Sub InitPageInfo()
  sstrPageInfo = ""

  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

   response.write("数据库连接未指定")
   response.End()
  End If
  If Trim(sstrSql) = "" Then
   sbooInitState = False

   response.write("SQL语句未指定")
   response.End()
  End If
  sintPageSize = toNum(sintPageSize, 20)
  If (sintPageSize < 1) Or (sintPageSize > 100) Then
   sbooInitState = False

   response.write("每页记集数未设置或不符合规则(1 - 100)")
   response.End()
  End If
  sintPageNow = toNum(sintPageNow, 1)

  sintRecordCount = -1
 End Sub
End Class
<%
 response.Buffer = True
 Dim intDateStart
 intDateStart = Timer()

 Rem ## 打开数据库连接
 Rem #################################################################
  function f__OpenConn()
   Dim strDbPath
   Dim connstr
   strDbPath = "./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 #################################################################

 Dim strLocalUrl
 strLocalUrl = request.ServerVariables("SCRIPT_NAME")
 
 Dim intPageNow
 intPageNow = request.QueryString("page")
 
 Dim intPageSize, strPageInfo
 intPageSize = 30
 
 Dim arrRecordInfo, i
 Dim Conn, sql, sqlCount
 sql = "SELECT [ID], [aaaa], [bbbb], [cccc]" & _
  " FROM [table1]" & _
  " ORDER BY [ID] DESC"
 sqlCount = "SELECT Count([ID])" & _
   " FROM [table1]"
 f__OpenConn
  Dim clsRecordInfo
  Set clsRecordInfo = New Cls_PageView
  
  Rem 记录集总数取值优先顺序: strSqlCount >>  intRecordCount
  Rem 即当 strSqlCount 有值时, intRecordCount 无作用
  Rem 因此, 若要手工设置记录总数, 请设置 intRecordCount, strSqlCount 留空
  Rem 若以上两者都没有设置, 则取 strSql 执行后的 RecordCount 属性.
   clsRecordInfo.intRecordCount = 2816
   clsRecordInfo.strSqlCount = sqlCount
  Rem 此处因设置了 strSqlCount, 则记录总数将由此语句计算得出.
  
  Rem 设置 SQL 查询语句
   clsRecordInfo.strSql = sql
  
  Rem 设置每页显示数
   clsRecordInfo.intPageSize = intPageSize
  
  Rem 设置当前显示页
   clsRecordInfo.intPageNow = intPageNow
  
  Rem 设置转向页面
   clsRecordInfo.strPageUrl = strLocalUrl
  
  Rem 设置页面转向参数
   clsRecordInfo.strPageVar = "page"

  clsRecordInfo.objConn = Conn  
  arrRecordInfo = clsRecordInfo.arrRecordInfo
  strPageInfo = clsRecordInfo.strPageInfo
  Set clsRecordInfo = nothing
 f__CloseConn
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>萧月痕通用分页类1.2 测试</title>
<link rel="stylesheet" href="page.css" type="text/css">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div class="PageView">
<table width="760" border="1" cellspacing="0" cellpadding="4" align="center" bordercolordark="#FFFFFF" bordercolorlight="#CCCCCC">
  <tr align="center">
    <td width="60">ID</td>
    <td width="150">标题</td>
    <td width="*">内容(显示前20个字)</td>
    <td width="150">时间</td>
  </tr>
 <%
  Dim bgColor
  If IsArray(arrRecordInfo) Then
   For i = 0 to UBound(arrRecordInfo, 2)
   bgColor="#FFFFFF"
   if i mod 2=0 then bgColor="#DFEFFF"
 %>
  <tr bgcolor="<%=bgColor%>">
    <td width="60"><%= arrRecordInfo(0, i)%></td>
    <td width="150"><%= arrRecordInfo(1, i)%></td>
    <td width="*"><%= arrRecordInfo(2, i)%></td>
    <td width="150"><%= arrRecordInfo(3, i)%></td>
  </tr>
 <%
   Next
  End If
 %>
</table>
</div>
<table width="760" border="0" cellspacing="0" cellpadding="4">
 <tr>
  <td><%= strPageInfo%></td>
 </tr>
 <tr>
  <td align="center"><%= getTimeOver(0)%></td>
 </tr>
</table>
</body>
</html>

时间: 2024-09-21 07:14:45

asp 通用分页类的相关文章

ASP通用分页类

分页 一.类的属性.方法 这是一个ASP通用分页类.你可以用它方便的给记录集分页,当然在网上有许多的分页类和分页函数.本分页主要有GetConn.GetRS.SQL.URL.CSSFile.FldName.FldNote.FldWidth.FldAlign.ShowPageType.TleFTColor.TleWidth.PageSize.ShowWidth.Init.Pages.ShowData.Close等属性和方法. 1.GetConn属性:用来获取一个已创建的Connection对象.

创建一个ASP通用分页类

创建|分页 转自"蓝色理想" http://www.blueidea.com/tech/program/2004/1989.asp.ASP分页一直是一个众说纷坛的话题,而且也没有一个太有效的方法.今天在CSDN的BLOG里看到了这个ASP分页类,(http://blog.csdn.net/xiangbo520/archive/2004/09/22/113539.aspx),只是提供了源码,而且源码中部分标签已被作为HTML显示了,想复制下来也不太容易,所有到蓝色理想找到了一篇全面一点的

创建一个ASP通用分页类_ASP CLASS类

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

ASP通用分页类源码

分页 <%'==================================================================='XDOWNPAGE ASP版本'版本 1.00'Code by zykj2000'Email: zykj_2000@163.net'BBS: http://bbs.513soft.net'本程序可以免费使用.修改,希望我的程序能为您的工作带来方便'但请保留以上请息''程序特点'本程序主要是对数据分页的部分进行了封装,而数据显示部份完全由用户自定义,'

创建一个ASP通用分页类(二)代码部分

创建|分页 <%'====================================================================='XDOWNPAGE ASP版本'版本 1.00'Code by zykj2000'Email: zykj_2000@163.net'BBS: http://bbs.513soft.net'本程序可以免费使用.修改,希望我的程序能为您的工作带来方便'但请保留以上请息''程序特点'本程序主要是对数据分页的部分进行了封装,而数据显示部份完全由用户

ASP 通用模板类

模板 ASP 通用模板类. 适合存在较少循环的模板.未实现内部循环,需要使用正则表达式,较浪费资源和时间,如需使用可参考这篇文章. 特性可设定私有缓存或公共缓存,提高效率可自由选择使用 Stream 组件或 FSO 组件支持自定义文件编码可保存文件 属性 Name文本,该模板名称,主要用于使用公共缓存时区分不同模板. Format文本,文件编码类型,可设置值. Object文本,使用组件,可设置值: StreamFSO PublicCache布尔值,使用公共缓存,开启时模板文件将保存到Appli

简单好用的ASP.NET分页类(支持AJAX、自定义文字)

  这篇文章主要介绍了简单好用的ASP.NET分页类(支持AJAX.自定义文字),本文直接给出实现代码和使用方法,需要的朋友可以参考下 在做网站没用 JS UI控件时 很实用 用法: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 var ps=new PageString();   /*可选参数*/   ps.SetIsEnglish = true;// 是否是英文 (默认:false) ps.SetIsShowText = true;//是

ASP通用模板类

  ASP 通用模板类. 适合存在较少循环的模板.未实现内部循环,需要使用正则表达式,较浪费资源和时间,如需使用可参考这篇文章. 特性 可设定私有缓存或公共缓存,提高效率 可自由选择使用 Stream 组件或 FSO 组件 支持自定义文件编码 可保存文件 属性 Name 文本,该模板名称,主要用于使用公共缓存时区分不同模板. Format 文本,文件编码类型,可设置值. Object 文本,使用组件,可设置值: Stream FSO PublicCache 布尔值,使用公共缓存,开启时模板文件将

ASP经典分页类_应用技巧

ASP经典分页类  出处      '===================================================================== 'XDOWNPAGE   ASP版本 '版本   1.00 'Code by  zykj2000 'Email:   zykj_2000@163.net 'BBS:   http://bbs.513soft.net '本程序可以免费使用.修改,希望我的程序能为您的工作带来方便 '但请保留以上请息 ' '程序特点 '本程序