生活不赖

行在正确的路上,高手的道路艰难...
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

通用分页类

Posted on 2005-12-28 18:02  卡蒙  阅读(231)  评论(0)    收藏  举报
发一个通用分页类

<%
'// +---------------------------------------------------------------------------+
'// | 这个文件是 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

%>