发一个通用分页类
| <% '// +---------------------------------------------------------------------------+ '// | 这个文件是 Xiteblog 项目的一部分。 | '// | Copyright (c) 2005.10.12 Xinsoft。 | '// | | '// | 要查看完整的版权信息和许可信息,请查看源代码中附带的 COPYRIGHT 文件, | '// | 或者联系: http://xinsoft.blogchina.com,MSN: xinsoft@263.net | '// +---------------------------------------------------------------------------+ '/** ' * 通用分页类 ' * ' * @copyright Copyright (c) 2005.10 Xinsoft ' * @author Xinsoft <xinsoft@blogchina.com> ' * @version v 1.1 2005/09/05 14:34:00 Xinsoft ' * @package Xite ' * @since 1.0 ' */ Class RecordsetDiv Public RS ' as RowsMatrix Private database ' as DB Private connType ' as Integer Public PageSize ' as Integer // 页大小 Public PageID ' as Integer // 页码 Public TableName ' as String // 表名 Public QueryFields ' as String // 查询的字段 Public FilterStr ' as String // 过滤条件 Public KeyField ' as String // 主键 Public OrderbyField ' as String // 排序字段 Public OrderbyDir ' as Integer // 排序方向:0 -- Asc; 1 -- Desc; Public SQL ' as String // 查询语句 Public CountSQL ' as String // 统计语句 Public Total ' as Integer // 统计到的记录总数 Public MaxPageID ' as Integer // 最大页码 Private Sub Class_Initialize FilterStr="" OrderbyDir=0 connType=0 Total=0 MaxPageID=0 PageSize=10 PageID=1 Set RS=New RowsMatrix Set database=New DB End Sub Private Sub Class_Terminate database.ConnClose Set RS=Nothing Set database=Nothing End Sub Public Sub SQLBuild() If PageID<1 Then PageID=1 If MaxPageID>0 Then If PageID>MaxPageID Then PageID=MaxPageID End If Dim strTmp Dim strOrder If OrderbyDir<>0 Then strTmp="<(select min" strOrder=" order by " & OrderbyField & " desc" Else strTmp=">(select max" strOrder=" order by " & OrderbyField & " asc" End If SQL="select top " & CStr(PageSize) & " " & QueryFields & " from " & TableName & " where " & OrderbyField & strTmp & "(" & OrderbyField & ") from (select top " & CStr( (PageID-1)*PageSize ) & " " & OrderbyField & " from " & TableName & " " & strOrder & ") as tblTmp)" & strOrder If ""<>""&FilterStr Then SQL="select top " & CStr(PageSize) & " " & QueryFields & " from " & TableName & " where " & OrderbyField & strTmp & "(" & OrderbyField & ") from (select top " & CStr( (PageID-1)*PageSize ) & " " & OrderbyField & " from " & TableName & " where " & FilterStr & " " & strOrder & ") as tblTmp) and " & FilterStr & " " & strOrder End If If PageID=1 Then strTmp="" If ""<>""&FilterStr Then strTmp=" where " & FilterStr End If SQL="select top " & CStr(PageSize) & " " & QueryFields & " from " & TableName & " " & strTmp & " " & strOrder End If CountSQL="select count("&KeyField&") as Total from " & TableName If ""<>""&FilterStr Then CountSQL=CountSQL & " where " & FilterStr End If End Sub Public Function getTotal( connTypeNumber ) database.ConnOpen(connTypeNumber) connType=connTypeNumber CountSQL="select count("&KeyField&") as Total from " & TableName If ""<>""&FilterStr Then CountSQL=CountSQL & " where " & FilterStr End If database.SQL=CountSQL database.getQueryRows Total=database.Rows.A(0,0) If PageSize>0 Then MaxPageID=Cint(Total/PageSize) If MaxPageID*PageSize<Total Then MaxPageID=MaxPageID+1 End If getTotal=Total End Function Property Get PageCount() PageCount=MaxPageID End Property Public Sub getRs(ByRef objRows) database.ConnOpen(connType) SQLBuild database.SQL=SQL database.getRS( objRows ) End Sub End Class %> <!-- #include file="../../lib/common.asp" --> <!-- #include file="../../lib/ClientInfo.asp" --> <!-- #include file="../../lib/database.asp" --> <!-- #include file="../../lib/InData.asp" --> <!-- #include file="../../lib/Cache.asp" --> <% Dim rs Set rs=New RowsMatrix Dim QueryFields Dim TableName QueryFields="aid, title, pdate, ucid, ucname, pcid, click, reply, intro, furlstat, author, su, trace" TableName="View_a2" Dim oRd Set oRd=New RecordsetDiv 'oRd.Conn=0 oRd.TableName = TableName oRd.QueryFields = QueryFields oRd.FilterStr = "owid="&uid&" and precstat=0" oRd.KeyField = "aid" oRd.OrderbyField = "aid" oRd.OrderbyDir = 1 '// Desc oRd.PageSize = n Dim Total, PageCount Total=oRd.getTotal(0) PageCount=oRd.MaxPageID oRd.PageID = p oRd.getRs(rs) Set oRd=Nothing %> |
浙公网安备 33010602011771号