⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pageclass.asp

📁 在线图书管理 在线图书管理在线图书管理在线图书管理在线图书管理在线图书管理
💻 ASP
字号:
<SCRIPT language=VBSCRIPT RUNAT=SERVER>

Class JayPager
	'--------------------------------
	'     JayPager 类 (Ver: 1.0)
	' Modified by Jay 2004.8.27
	'--------------------------------
	
	'//-------------------- 定义变量 --------------------//'
	Private sTableName		'//表名
	Private sSqlString		'//自定义Sql语句
	Private aCondition()	'//查询条件(数组)
	Private sCondition		'//查询条件(字符串)
	Private iPage		    '//当前页码
	Private iPageSize		'//每页记录数
	Private iPageCount		'//总页数
	Private iRecCount		'//当前查询条件下的记录数
	Private iTotalRecCount	'//总记录数
	Private sFields		    '//输出的字段名
	Private sOrderBy		'//排序字符串
	Private sGroupBy
	Private sSql		    '//当前的查询语句
	Private sPkey		    '//主键
	Private pConn		    '//连接对象
	Private iDefPageSize	'//默认每页显示的记录数
	Private sProjectName	'//项目名
	Private sVersion		'/版本号
	Private bShowError		'//是否显示错误信息
	
	'//-------------------- 事件、方法 --------------------//'
	'//类初始化事件
	Private Sub Class_Initialize()
		ReDim aCondition(-1)
		iPage		= 1
		iRecCount		= Null
		iTotalRecCount	= Null
		iPageCount		= Null
		bShowError		= True
		iPageSize		= 10
		sFields		= "*"
		sPkey		= "ID"
		sCondition		= ""
		sOrderBy		= ""
		sGroupBy        =""
		sSqlString		= ""
		sProjectName	= "数据库翻页优化 Modify by Jay"
		sVersion		= "1.0"
	End Sub
	
	'//类结束事件
	Private Sub Class_Terminate()
		Set pConn = Nothing
	End Sub
	
	'//错误处理
	Public Sub doError(s)
			Dim sTmp
			sTmp = CLng(Rnd() * 100)
			Response.write( "<DIV STYLE='WIDTH:760;font-size:9pt;cursor:hand'>" )
			Response.write( "<LABEL ONCLICK='ERRORDIV"&sTmp&".style.display=(ERRORDIV"&sTmp&".style.display==""""?""none"":"""")'>" )
			Response.write( "<SPAN STYLE='BACKGROUND-COLOR:#CCCC00;COLOR:WHITE;'>〖 JayPager 提示信息 〗</SPAN><BR></LABEL>" )
			Response.write( "<DIV ID='ERRORDIV"&sTmp&"' STYLE='DISPLAY:NONE;WIDTH:100%;" )
			Response.write( "BORDER: 1PX SOLID #CCCC00;PADDING:5;overflow:hidden;text-overflow:ellipsis;'><NOBR>" )
			Response.write( "<SPAN STYLE='COLOR:RED'>Description</SPAN>: " & s & "<BR>" )
			Response.write( "<SPAN STYLE='COLOR:RED'>Provider</SPAN>: " & sProjectName )
			Response.write( "  <SPAN STYLE='COLOR:RED'>Version</SPAN>: " & sVersion & "<BR>" )
			Response.write( "</NOBR></DIV></DIV><BR>" )
	End Sub
	
	'//产生分页的SQL语句
	Public Function getSql()
		Dim iStart, iEnd
		Call makeCondition()
		iStart = ( iPage - 1 ) * iPageSize
		iEnd = iStart + iPageSize
		getSql  = " SELECT DISTINCT " & sFields & " FROM ["&sTableName&"] " _
				& " WHERE ["&sPKey&"] NOT IN ( " _
				& "   SELECT TOP "&iStart&" ["&sPKey&"] FROM ["&sTableName&"] " & sCondition & " " & sGroupBy & " " & sOrderBy & " " _
				& " )" _
				& " AND ["&sPKey&"] IN ( " _
				& "   SELECT TOP "&iEnd&" ["&sPKey&"] FROM ["&sTableName&"] " & sCondition & " " & sGroupBy &  " "  & sOrderBy & " " _
				& " )" _
				& " " & sGroupBy & " " _
				& " " & sOrderBy & " "
				
	End Function
	
	'//产生条件字符串
	Private Sub makeCondition()
		If UBound(aCondition)>=0 Then
			sCondition = " WHERE " & Join(aCondition, " AND ")
		End If
	End Sub
	
	'//计算总记录数(带条件)
	Private Sub CaculateRecCount()
		On Error Resume Next
		Dim pageoRs
		Call makeCondition()
		Set pageoRs = pConn.Execute( "SELECT COUNT(["&sPKey&"]) FROM [" & sTableName & "]" & sCondition )
		If Err Then
			doError Err.Description
			Response.End()
		End If
		iRecCount = pageoRs.Fields.Item(0).Value
		Set pageoRs = Nothing
	End Sub
	
	'//计算总记录数(不带条件)
	Private Sub CaculateTotalRecCount()
		On Error Resume Next
		Dim pageoRs
		Set pageoRs = pConn.Execute( "SELECT COUNT(["&sPKey&"]) FROM [" & sTableName & "]" )
		If Err Then
			doError Err.Description
			Response.End()
		End If
		iTotalRecCount = pageoRs.Fields.Item(0).Value
		Set pageoRs = Nothing
	End Sub
	
	'//计算页数
	Private Sub CaculatePageCount()
		If isNull(iRecCount) Then CaculateRecCount()
		If iRecCount = 0 Then iPageCount = 0 : Exit Sub
		iPageCount = Abs( Int( 0 - (iRecCount / iPageSize) ) )
	End Sub

	'//增加条件
	Public Sub AddCondition(s)
		If Len(s)<0 Then Exit Sub
		ReDim Preserve aCondition(UBound(aCondition)+1)
		aCondition(UBound(aCondition)) = s
	End Sub

	'//版本信息
	Public Function Information()
		doError "Coding by <A HREF='MAILTO:zhuj@cdut.edu.cn'>Jay</A> @ <A HREF='http://www.cie.cdut.edu.cn'>http://www.cie.cdut.edu.cn</A> ."
	End Function


	'//-------------------- 输入属性 --------------------//'
	'//定义连接对象
	Public Property Set ActiveConnection(o)
		Set pConn = o
	End Property
	
	'//定义查询表名
	Public Property Let TableName(s)
		sTableName = s
	End Property
	
	'//定义需要输出的字段名
	Public Property Let Fields(s)
		sFields = s
	End Property
	
	'//定义主键
	Public Property Let Pkey(s)
		sPkey = s
	End Property
	
	'//定义排序规则
	Public Property Let OrderBy(s)
		sOrderBy = " ORDER BY " & s & " "
	End Property
	
	'//定义分组规则
	Public Property Let GroupBy(s)
	   sGroupBy = "  Group By "& s & " "
	End Property
	
	'//定义每页的记录条数 
	Public Property Let PageSize(s)
		iPageSize = s
		If Not isNumeric(iPageSize) Then iPageSize = iDefaultPageSize
		If CLng(iPageSize)<1 Then iPageSize = iDefaultPageSize
	End Property

	'//定义当前页码
	Public Property Let Page(s)
		iPage = s
		If Not isNumeric(iPage) Then iPage = 1
		If CLng(iPage)<1 Then iPage = 1
		Call CaculatePageCount()
		If CLng(iPage)>CLng(iPageCount) And iPageCount>0 Then iPage = iPageCount
	End Property

	'//自定义查询语句
	Public Property Let Sql(s)
		sSqlString = s
	End Property

	'//-------------------- 输出属性 --------------------//'
	'//取得当前条件下的记录数
	Public Property Get RecordCount
		If isNull(iRecCount) Then CaculateRecCount()
		RecordCount = iRecCount
	End Property
	
	'//取得当前页码
	Public Property Get Page
		Page = iPage
	End Property
	
	'//取得当前页码
	Public Property Get AbsolutePage
		AbsolutePage = iPage
	End Property
	
	'//取得当前查询的条件
	Public Property Get Condition
		If Len(sCondition)<1 Then makeCondition()
		Condition = sCondition
	End Property
	
	'//取得总的记录数
	Public Property Get TotalRecordCount
		If isNull(iTotalRecCount) Then CaculateTotalRecCount()
		TotalRecordCount = iTotalRecCount
	End Property
	
	'//取得总页数
	Public Property Get PageCount
		If isNull(iPageCount) Then CaculatePageCount()
		PageCount = iPageCount
	End Property
	
	'//得到分页后的记录集
	Public Property Get Recordset
		On Error Resume Next
		sSql = getSql()
		Set Recordset = pConn.Execute( sSql )
		If Err Then
			If bShowError Then doError Err.Description
			If Len(sSqlString)>0 Then
				Set Recordset = pConn.Execute( sSqlString )
				If Err Then
					doError Err.Description
					Response.End()
				End If
			Else
				doError Err.Description
			End If
		End If
		Err.Clear()
	End Property
	
	'//版本信息
	Public Property Get Version
		Version = sVersion
	End Property

End Class

</SCRIPT>
<SCRIPT language="JavaScript">
	function doPage(n){
		location.href=location.pathname+'?action=list&page='+n;
	}
</SCRIPT>
<%Function IIf(sCon,s1,s2)
   if sCon then
      IIf=s1
   else
      IIf=s2
   End If
End Function
%>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -