查詢翻頁優(yōu)化第1/2頁
更新時(shí)間:2006年09月30日 00:00:00 作者:
復(fù)制代碼 代碼如下:
<SCRIPT language=VBSCRIPT RUNAT=SERVER>
'//---- COCOON_自定義類_翻頁優(yōu)化代碼 ----//'
Class cc_db_Pager
'--------------------------------
' COCOON Db_Pager 類 (Ver: 1.02)
' 作者: Sunrise_Chen (sunrise_chen@msn.com)
' 請保留此信息,謝謝。
'
' 2003/06 修正一個(gè)錯(cuò)誤,描述:如果ID不唯一,將產(chǎn)生多條重復(fù)記錄的錯(cuò)誤。
' 2003.5
'--------------------------------
'//-------------------- 定義變量 --------------------//'
Private sTableName '//表名
Private sSqlString '//自定義Sql語句
Private aCondition() '//查詢條件(數(shù)組)
Private sCondition '//查詢條件(字符串)
Private iPage '//當(dāng)前頁碼
Private iPageSize '//每頁記錄數(shù)
Private iPageCount '//總頁數(shù)
Private iRecCount '//當(dāng)前查詢條件下的記錄數(shù)
Private iTotalRecCount '//總記錄數(shù)
Private sFields '//輸出的字段名
Private sOrderBy '//排序字符串
Private sSql '//當(dāng)前的查詢語句
Private sPkey '//主鍵
Private oConn '//連接對象
Private iDefPageSize '//默認(rèn)每頁顯示的記錄數(shù)
Private sProjectName '/項(xiàng)目名
Private sVersion '/版本號
Private bShowError '//是否顯示錯(cuò)誤信息
'//-------------------- 事件、方法 --------------------//'
'//類初始化事件
Private Sub Class_Initialize()
ReDim aCondition(-1)
iPage = 1
iRecCount = Null
iTotalRecCount = Null
iPageCount = Null
bShowError = True
iPageSize = 10
sFields = "*"
sPkey = "ID"
sCondition = ""
sOrderBy = ""
sSqlString = ""
sProjectName = "COCOON 類系列 數(shù)據(jù)庫翻頁優(yōu)化"
sVersion = "1.02"
End Sub
'//類結(jié)束事件
Private Sub Class_Terminate()
Set oConn = Nothing
End Sub
'//錯(cuò)誤處理
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;'>〖 CC_db_Pager 提示信息 〗</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
'//產(chǎn)生分頁的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 & " " & sOrderBy & " " _
& " )" _
& " AND ["&sPKey&"] IN ( " _
& " SELECT TOP "&iEnd&" ["&sPKey&"] FROM ["&sTableName&"] " & sCondition & " " & sOrderBy & " " _
& " )" _
& " " & sOrderBy & " "
End Function
'//產(chǎn)生條件字符串
Private Sub makeCondition()
If UBound(aCondition)>=0 Then
sCondition = " WHERE " & Join(aCondition, " AND ")
End If
End Sub
'//計(jì)算總記錄數(shù)(帶條件)
Private Sub CaculateRecCount()
On Error Resume Next
Dim oRs
Call makeCondition()
Set oRs = oConn.Execute( "SELECT COUNT(["&sPKey&"]) FROM [" & sTableName & "]" & sCondition )
If Err Then
doError Err.Description
Response.End()
End If
iRecCount = oRs.Fields.Item(0).Value
Set oRs = Nothing
End Sub
'//計(jì)算總記錄數(shù)(不帶條件)
Private Sub CaculateTotalRecCount()
On Error Resume Next
Dim oRs
Set oRs = oConn.Execute( "SELECT COUNT(["&sPKey&"]) FROM [" & sTableName & "]" )
If Err Then
doError Err.Description
Response.End()
End If
iTotalRecCount = oRs.Fields.Item(0).Value
Set oRs = Nothing
End Sub
'//計(jì)算頁數(shù)
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:sunrise_chen@msn.com'>Sunrise_Chen</A> @ <A
End Function
'//-------------------- 輸入屬性 --------------------//'
'//定義連接對象
Public Property Set ActiveConnection(o)
Set oConn = 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
'//定義排序規(guī)則
Public Property Let OrderBy(s)
sOrderBy = " ORDER BY " & s & " "
End Property
'//定義每頁的記錄條數(shù)
Public Property Let PageSize(s)
iPageSize = s
If Not isNumeric(iPageSize) Then iPageSize = iDefaultPageSize
If CLng(iPageSize)<1 Then iPageSize = iDefaultPageSize
End Property
'//定義當(dāng)前頁碼
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
'//-------------------- 輸出屬性 --------------------//'
'//取得當(dāng)前條件下的記錄數(shù)
Public Property Get RecordCount
If isNull(iRecCount) Then CaculateRecCount()
RecordCount = iRecCount
End Property
'//取得當(dāng)前頁碼
Public Property Get Page
Page = iPage
End Property
'//取得當(dāng)前頁碼
Public Property Get AbsolutePage
AbsolutePage = iPage
End Property
'//取得當(dāng)前查詢的條件
Public Property Get Condition
If Len(sCondition)<1 Then makeCondition()
Condition = sCondition
End Property
'//取得總的記錄數(shù)
Public Property Get TotalRecordCount
If isNull(iTotalRecCount) Then CaculateTotalRecCount()
TotalRecordCount = iTotalRecCount
End Property
'//取得總頁數(shù)
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 = oConn.Execute( sSql )
If Err Then
If bShowError Then doError Err.Description
If Len(sSqlString)>0 Then
Set Recordset = oConn.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>
相關(guān)文章
實(shí)現(xiàn)支持邏輯搜索/單詞搜索/詞組搜索+支持OR/AND關(guān)鍵字的VBS CLASS!
實(shí)現(xiàn)支持邏輯搜索/單詞搜索/詞組搜索+支持OR/AND關(guān)鍵字的VBS CLASS!...2006-08-08