`
guoyiqi
  • 浏览: 997923 次
社区版块
存档分类
最新评论

再来一个分页类

 
阅读更多

该ASP通用分页类主要是易用, 速度取决于实际应用: 若已指定记录总数(intRecordCount 属性), 可支持 百万级 数据应用;若指定了统计语句(strSqlCount 属性), 则取决于该语句的统计效率; 若两者皆未指定, 则根据用户给定的查询语句, 取RecordCount属性值, 当然这样的效率就不会高了. 若您在应用中遇到问题, 请使用MSN与我联系: xiaoyuehen(at)msn.com

适用范围:


1. 用于一般分页需求, 只需指定查询语句及其他几个主要参数即可, 方便易用.
2.分页的速度取决于你给的 SQL 语句执行效率.
3.可指定记录数统计语句, 也可以自己设置记录集总数, 灵活定制.
4.若不喜欢类产生的分页导航, 也可自行设定转向.

示例:


CustomPageView.asp (名称可任取)

<link href="D:/htmlcode/style/aspvbs.css" type="text/css" rel="stylesheet">
<%@LANGUAGE = "VBScript" CODEPAGE="936"%>
<%Option Explicit%>
<!--#include file="Cls_PageView.asp"-->
<%
	response.Buffer = True

	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 #################################################################

	Dim strLocalUrl
	strLocalUrl = request.ServerVariables("SCRIPT_NAME")
	
	Dim intPageNow
	intPageNow = request.QueryString("page")
	
	Dim intPageSize, strPageInfo
	intPageSize = 10
	
	Dim arrRecordInfo, i
	Dim Conn, sql, sqlCount
	sql = "SELECT [产品ID], [产品名称], [单位]" & _
		" FROM [产品0202]" & _
		" ORDER BY [产品ID] ASC"
	sqlCount = "SELECT Count([产品ID])" & _
			" FROM [产品0202]"
	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>分页测试</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>产品ID</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(0)%></td>
  </tr>
</table>
</body>
</html>

类文件:

Cls_PageView.asp


<link href="d:/htmlcode/style/aspvbs.css" type="text/css" rel="stylesheet">
<%
	Rem ************************************************
	Rem ** 作者: 萧月痕(xiaoyuehen)
	Rem ** ASP 通用分页类
	Rem ** 版本: 1.2.00
	Rem ** 最后修改: 2005-4-18
	Rem ** 版权说明: 在文档完整的前提下可任意复制, 传播.
	Rem ** 联系作者: xiaoyuehen(at)msn.com
	Rem ************************************************
	
	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
%>
分享到:
评论

相关推荐

    一个很好的分页类php分页类

    标题中的"一个很好的分页类php分页类"暗示我们这里有一个专门用于实现分页功能的PHP类。这个类可能包含了一系列方法,用于计算总页数、生成页码链接以及处理用户请求的特定页面。 `page.class.php`可能是这个分页类...

    这是我个人写的一个分页类

    这是我人做的一个分页类,这是我人做的一个分页类,这是我人做的一个分页类,这是我人做的一个分页类,这是我人做的一个分页类,这是我人做的一个分页类,这是我人做的一个分页类,

    自己写的一个php的分页类

    标题中的"自己写的一个php的分页类"表明这是一个自定义的PHP类,用于实现数据库查询的分页功能。分页类通常包括计算页码、获取每页数据、显示导航链接等功能,以优雅地呈现数据库查询结果。 描述中提到的“select *...

    一个java类 能够简单分页类

    就一个java类 调用一个方法就实现分页效果 能够简单实现分页

    php分页类工具类

    这是一个功能强大,并且易于扩展的分页类,该类将分页的各个元素单独分开模块化,用户可以随心所欲的拼接出自己想要的分页效果,更是添加了控制分页样式的功能,可以让你独立设置分页各元素的样式,也集成了集中已经...

    ASP分页通用类 asp分页

    一个典型的分页类可能包含以下几个主要部分: 1. **初始化**:设置初始的分页参数,如每页显示的记录数、当前页数等。 2. **计算总页数**:根据数据库查询到的总记录数,计算出总的页面数。 3. **生成SQL查询语句**...

    php封装的page分页类.zip

    "php封装的page分页类" 是一个专门用于处理这种需求的类库,它简化了PHP分页的实现过程,通过封装核心逻辑,使开发者能够快速、高效地实现分页功能。 首先,我们要理解分页的基本原理。在数据库查询中,如果一次性...

    asp.net 分页类

    这时,创建一个自定义的分页类就显得尤为必要。 一个自定义的ASP.NET分页类通常包括以下核心组件和功能: 1. **数据获取**:分页类首先需要能从数据源(如SQL Server数据库、XML文件、Web服务等)中获取数据。这...

    分页 jsp 分页类 java

    首先,我们需要创建一个分页类,这个类将包含关于分页的基本信息,如当前页、总页数、每页显示的记录数以及总记录数等。以下是一个简单的分页类的示例: ```java public class Pagination { private int current...

    Java公用分页类 Java公用分页类

    Java公用分页类Java公用分页类Java公用分页类Java公用分页类Java公用分页类Java公用分页类Java公用分页类Java公用分页类Java公用分页类Java公用分页类Java公用分页类Java公用分页类

    java分页大全 包括最强大的java分页类

    强大的分页类通常会考虑更多的实际需求,比如排序、过滤条件、统计信息等,并且可能具有高度可配置性,以适应不同的项目需求。 最后,"分页.rar"可能包含的是一个独立的分页解决方案,可能具有特定的优化或特性。...

    PHP的一个超强分页类

    本篇文章将深入探讨一个名为"page.class.php"的PHP分页类,以及如何使用它来实现高效的分页功能。 首先,我们要理解分页的基本原理。在网页上,如果一次性加载所有数据,不仅会消耗大量服务器资源,而且可能导致...

    asp分页类,套用方便,收藏

    总的来说,"asp分页类"是一个实用的工具,它简化了在ASP环境中实现分页功能的过程,提升了网站的用户体验和性能。开发者可以依据需求选择合适的分页类,或者参考此类实现自己的分页逻辑。这个压缩包的收藏价值在于...

    常用类 数据库连接类 分页类

    一个分页类通常包含获取总记录数、设置每页显示条数、计算总页数、生成分页链接等功能。例如,可以设计一个简单的分页类: ```php class Pagination { private $total_rows; private $per_page; private $...

    php 分页类 很实用的一个分页类

    分页类是一个封装了分页逻辑的对象,它可以计算总页数,生成页码链接,以及根据当前页获取对应的数据。它通过接收总的记录数和每页显示的条数来计算总页数,并根据当前页数来截取数据库查询结果。 2. **工作原理**...

    PHP超强分页类

    “PHP超强分页类”是一款专为PHP开发人员设计的强大工具,旨在简化分页逻辑,提高网页应用的用户体验。该类支持多种显示模式,能够适应不同的场景需求,并且兼容PHP4和PHP5版本。 #### 二、特点与功能 1. **支持...

    asp.net 通用分页类

    总结来说,`asp.net 通用分页类`是一个核心的C#类,它封装了分页逻辑,与`DataSet`配合处理大量数据的分页展示。`Pagination.cs`和`Default.aspx.cs`分别代表了分页类的实现和使用场景,通过这两个文件,我们可以...

    JAVA自己写的一个分页类 大家可以看看

    在Java编程中,分页是Web...总的来说,这个自定义分页类提供了一个基础的分页解决方案,涵盖了数据获取、页面跳转以及前端展示的各个方面。学习这个类可以帮助我们了解如何在Java Web项目中实现一个简单的分页功能。

    mvc分页辅助类

    描述中提到的"完全封装好的分页类,直接调用即可",意味着这个PagerHelper.cs文件提供了一个现成的解决方案。开发者只需要按照指定的方式调用其方法,无需关心分页的具体实现细节,如计算总页数、生成页码链接等。...

    php的一个分页类.zip

    这个"php的一个分页类.zip"文件提供了一个预封装的分页类,可以帮助开发者快速实现分页功能,无需从零开始编写代码。下面将详细介绍PHP分页类的核心概念、工作原理以及如何使用。 一、分页类核心概念 1. 总记录数...

Global site tag (gtag.js) - Google Analytics