<%@LANGUAGE = "VBScript" CODEPAGE="936"%>
<%Option Explicit%>
<!--#include file="Cls_PageView.asp"-->
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
<%
response.Buffer = True
Dim intDateStart
intDateStart = Timer()
Rem ## 開啟資料庫連接
Rem #################################################################
function f__OpenConn()
Dim strDbPath
Dim connstr
strDbPath = "./db.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 = 30
Dim arrRecordInfo, i
Dim Conn, sql, sqlCount
sql = "SELECT [ID], [aaaa], [bbbb], [cccc]" & _
" FROM [table1]" & _
" ORDER BY [ID] DESC"
sqlCount = "SELECT Count([ID])" & _
" FROM [table1]"
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>蕭月痕通用分頁類1.2 測試</title>
<link rel="stylesheet" href="page.css" type="text/css">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div class="PageView">
<table width="760" border="1" cellspacing="0" cellpadding="4" align="center" bordercolordark="#FFFFFF" bordercolorlight="#CCCCCC">
<tr align="center">
<td width="60">ID</td>
<td width="150">標題</td>
<td width="*">內容(顯示前20個字)</td>
<td width="150">時間</td>
</tr>
<%
Dim bgColor
If IsArray(arrRecordInfo) Then
For i = 0 to UBound(arrRecordInfo, 2)
bgColor="#FFFFFF"
if i mod 2=0 then bgColor="#DFEFFF"
%>
<tr bgcolor="<%=bgColor%>">
<td width="60"><%= arrRecordInfo(0, i)%></td>
<td width="150"><%= arrRecordInfo(1, i)%></td>
<td width="*"><%= arrRecordInfo(2, i)%></td>
<td width="150"><%= arrRecordInfo(3, i)%></td>
</tr>
<%
Next
End If
%>
</table>
</div>
<table width="760" border="0" cellspacing="0" cellpadding="4">
<tr>
<td><%= strPageInfo%></td>
</tr>
<tr>
<td align="center"><%= getTimeOver(0)%></td>
</tr>
</table>
</body>
</html>