主頁(yè) > 知識(shí)庫(kù) > Access 2000 數(shù)據(jù)庫(kù) 80 萬(wàn)記錄通用快速分頁(yè)類(lèi)

Access 2000 數(shù)據(jù)庫(kù) 80 萬(wàn)記錄通用快速分頁(yè)類(lèi)

熱門(mén)標(biāo)簽:為什么外呼系統(tǒng)需要預(yù)存話費(fèi)呢 離線電子地圖標(biāo)注軟件注冊(cè) 常用地圖標(biāo)注范圍點(diǎn) 企數(shù)外呼系統(tǒng)能用多久 辦理400電話一年多少錢(qián) 外呼回?fù)芟到y(tǒng)圖片 寧夏怎么申請(qǐng)400電話 咸陽(yáng)銷(xiāo)售外呼系統(tǒng) 蘭州智能語(yǔ)音電銷(xiāo)機(jī)器人功能
代碼本人優(yōu)化過(guò),測(cè)試通過(guò)

主要思路: 用一條語(yǔ)句統(tǒng)計(jì)(Count)出記錄數(shù)(而不在查詢(xún)時(shí)獲得 RecordCount 屬性), 緩存在 Cookies 中, 跳轉(zhuǎn)時(shí)就不用再次統(tǒng)計(jì). 使用 ADO 的 AbsolutePage 屬性進(jìn)行頁(yè)面跳轉(zhuǎn)即可. 為方便調(diào)用而寫(xiě)成類(lèi), 代碼主要地方已有說(shuō)明

硬件環(huán)境: AMD Athlon XP 2600+, 256 DDR 
軟件環(huán)境: MS Windows 2000 Advanced Server + IIS 5.0 + Access 2000 + IE 6.0 
測(cè)試結(jié)果: 初次運(yùn)行在 250(首頁(yè)) - 400(末頁(yè))毫秒, (記錄數(shù)緩存后)在頁(yè)面間跳轉(zhuǎn)穩(wěn)定在 47 毫秒以下.第1頁(yè)跳到最后一頁(yè)不多于 350 毫秒 

適用范圍: 用于普通分頁(yè). 不適用于有較復(fù)雜的查詢(xún)時(shí): 如條件為"[Title] Like ’%最?lèi)?ài)%’", 查詢(xún)的時(shí)間大大增加, 就算 Title 字段作了索引也沒(méi)用. :( 

%
Dim intDateStart
intDateStart = Timer()

Rem ## 打開(kāi)數(shù)據(jù)庫(kù)連接
Rem #################################################################
function f__OpenConn()
Dim strDbPath
Dim connstr
strDbPath = "fenye/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 ## 關(guān)閉數(shù)據(jù)庫(kù)連接
Rem #################################################################
function f__CloseConn()
If IsObject(conn) Then
conn.close
End If
Set conn = nothing
End function
Rem #################################################################
Rem 獲得執(zhí)行時(shí)間
Rem #################################################################
function getTimeOver(iflag)
Dim tTimeOver
If iflag = 1 Then
tTimeOver = FormatNumber(Timer() - intDateStart, 6, true)
getTimeOver = " 執(zhí)行時(shí)間: "  tTimeOver  " 秒"
Else
tTimeOver = FormatNumber((Timer() - intDateStart) * 1000, 3, true)
getTimeOver = " 執(zhí)行時(shí)間: "  tTimeOver  " 毫秒"
End If
End function
Rem #################################################################
Class Cls_PageView
Private sbooInitState
Private sstrCookiesName
Private sstrPageUrl
Private sstrPageVar
Private sstrTableName
Private sstrFieldsList
Private sstrCondiction
Private sstrOrderList
Private sstrPrimaryKey
Private sintRefresh

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
sstrCookiesName = ""
sstrPageUrl = ""
sstrPageVar = "page"
sstrTableName = ""
sstrFieldsList = ""
sstrCondiction = ""
sstrOrderList = ""
sstrPrimaryKey = ""
sintRefresh = 0

sintRecordCount = 0
sintPageSize = 0
sintPageNow = 0
sintPageMax = 0
End Sub

Rem ## 保存記錄數(shù)的 Cookies 變量
Public Property Let strCookiesName(Value)
sstrCookiesName = Value
End Property

Rem ## 轉(zhuǎn)向地址
Public Property Let strPageUrl(Value)
sstrPageUrl = Value
End Property

Rem ## 表名
Public Property Let strTableName(Value)
sstrTableName = Value
End Property

Rem ## 字段列表
Public Property Let strFieldsList(Value)
sstrFieldsList = Value
End Property

Rem ## 查詢(xún)條件
Public Property Let strCondiction(Value)
If Value > "" Then
sstrCondiction = " WHERE "  Value
Else
sstrCondiction = ""
End If
End Property

Rem ## 排序字段, 如: [ID] ASC, [CreateDateTime] DESC
Public Property Let strOrderList(Value)
If Value > "" Then
sstrOrderList = " ORDER BY "  Value
Else
sstrOrderList = ""
End If
End Property

Rem ## 用于統(tǒng)計(jì)記錄數(shù)的字段
Public Property Let strPrimaryKey(Value)
sstrPrimaryKey = Value
End Property

Rem ## 每頁(yè)顯示的記錄條數(shù)
Public Property Let intPageSize(Value)
sintPageSize = toNum(Value, 20)
End Property

Rem ## 數(shù)據(jù)庫(kù)連接對(duì)象
Public Property Let objConn(Value)
Set sobjConn = Value
End Property

Rem ## 當(dāng)前頁(yè)
Public Property Let intPageNow(Value)
sintPageNow = toNum(Value, 1)
End Property

Rem ## 頁(yè)面參數(shù)
Public Property Let strPageVar(Value)
sstrPageVar = Value
End Property

Rem ## 是否刷新. 1 為刷新, 其他值則不刷新
Public Property Let intRefresh(Value)
sintRefresh = toNum(Value, 0)
End Property

Rem ## 獲得當(dāng)前頁(yè)
Public Property Get intPageNow()
intPageNow = singPageNow
End Property

Rem ## 分頁(yè)信息
Public Property Get strPageInfo()
strPageInfo = sstrPageInfo
End Property

Rem ## 取得記錄集, 二維數(shù)組或字串, 在進(jìn)行循環(huán)輸出時(shí)必須用 IsArray() 判斷
Public Property Get arrRecordInfo()
If Not sbooInitState Then
Exit Property
End If

Dim rs, sql
sql = "SELECT "  sstrFieldsList  _
" FROM "  sstrTableName  _
sstrCondiction  _
sstrOrderList

Set rs = Server.CreateObject("Adodb.RecordSet")
rs.open sql, sobjConn, 1, 1
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
End Property

Rem ## 初始化記錄數(shù)
Private Sub InitRecordCount()
sintRecordCount = 0
If Not(sbooInitState) Then Exit Sub
Dim sintTmp
sintTmp = toNum(request.Cookies("_xp_"  sstrCookiesName), -1)
If ((sintTmp  0) Or (sintRefresh = 1))Then
Dim sql, rs
sql = "SELECT COUNT("  sstrPrimaryKey  ")"  _
" FROM "  sstrTableName  _
sstrCondiction
Set rs = sobjConn.execute(sql)
If rs.eof or rs.bof Then
sintTmp = 0
Else
sintTmp = rs(0)
End If
sintRecordCount = sintTmp

response.Cookies("_xp_"  sstrCookiesName) = sintTmp
Else
sintRecordCount = sintTmp
End If
End Sub

Rem ## 初始化分頁(yè)信息
Private Sub InitPageInfo()
sstrPageInfo = ""
If Not(sbooInitState) Then Exit Sub

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 = "首頁(yè) 上一頁(yè)"
Else
sstrPageInfo = sstrPageInfo  " a href="""  surl  "1"">首頁(yè)/a>"
sstrPageInfo = sstrPageInfo  " a href="""  surl  (sintPageNow - 1)  """>上一頁(yè)/a>"
End If

If sintPageMax - sintPageNow  1 then
sstrPageInfo = sstrPageInfo  " 下一頁(yè) 末頁(yè) "
Else
sstrPageInfo = sstrPageInfo  " a href="""  surl  (sintPageNow + 1)  """>下一頁(yè)/a> "
sstrPageInfo = sstrPageInfo  " a href="""  surl  sintPageMax  """>末頁(yè)/a> "
End If

sstrPageInfo = sstrPageInfo  " 頁(yè)次:strong>font color=""#990000"">"  sintPageNow  "/font> / "  sintPageMax  " /strong>"
sstrPageInfo = sstrPageInfo  " 共 strong>"  sintRecordCount  "/strong> 條記錄 strong>"  sintPageSize  "/strong> 條/頁(yè) "
End Sub

Rem ## 長(zhǎng)整數(shù)轉(zhuǎn)換
Private function toNum(s, Default)
s = s  ""
If s > "" And IsNumeric(s) Then
toNum = CLng(s)
Else
toNum = Default
End If
End function

Rem ## 類(lèi)初始化
Public Sub InitClass()
sbooInitState = True
If Not(IsObject(sobjConn)) Then sbooInitState = False
Call InitRecordCount()
Call InitPageInfo()   
End Sub
End Class


Dim strLocalUrl
strLocalUrl = request.ServerVariables("SCRIPT_NAME")

Dim intPageNow
intPageNow = request.QueryString("page")

Dim intPageSize, strPageInfo
intPageSize = 30

Dim arrRecordInfo, i
Dim Conn
f__OpenConn
Dim clsRecordInfo
Set clsRecordInfo = New Cls_PageView

clsRecordInfo.strTableName = "[table1]"
clsRecordInfo.strPageUrl = strLocalUrl
clsRecordInfo.strFieldsList = "[ID], [aaaa], [bbbb], [cccc]"
clsRecordInfo.strCondiction = "[ID]  10000"
clsRecordInfo.strOrderList = "[ID] ASC"
clsRecordInfo.strPrimaryKey = "[ID]"
clsRecordInfo.intPageSize = 20
clsRecordInfo.intPageNow = intPageNow

clsRecordInfo.strCookiesName = "RecordCount"
clsRecordInfo.strPageVar = "page"

clsRecordInfo.intRefresh = 0
clsRecordInfo.objConn = Conn
clsRecordInfo.InitClass

arrRecordInfo = clsRecordInfo.arrRecordInfo
strPageInfo = clsRecordInfo.strPageInfo
Set clsRecordInfo = nothing
f__CloseConn
%>
html>
head>
meta http-equiv="Content-Type" content="text/html; charset=gb2312">
title>分頁(yè)測(cè)試/title>
style type="text/css">
!--
.PageView {
font-size: 12px;
}
.PageView td {
border-right-style: solid;
border-bottom-style: solid;
border-right-color: #E0E0E0;
border-bottom-color: #E0E0E0;
border-right-width: 1px;
border-bottom-width: 1px;
}
.PageView table {
border-left-style: solid;
border-top-style: solid;
border-left-color: #E0E0E0;
border-top-color: #E0E0E0;
border-top-width: 1px;
border-left-width: 1px;
}
tr.Header {
background: #EFF7FF;
font-size: 14px;
font-weight: bold;
line-height: 120%;
text-align: center;
}
-->
/style>
style type="text/css">
!--
body {
font-size: 12px;
}
a:link {
color: #993300;
text-decoration: none;
}
a:visited {
color: #003366;
text-decoration: none;
}
a:hover {
color: #0066CC;
text-decoration: underline;
}
a:active {
color: #000000;
text-decoration: none;
}
table {
font-size: 12px;
}
-->
/style>
/head>
body>
table width="100%" border="0" cellspacing="0" cellpadding="4">
  tr>
  td>nbsp;%= strPageInfo%>/td>
/tr>
/table>
div class="PageView">
  table width="100%" border="0" cellspacing="0" cellpadding="4">
    tr class="Header"> 
    td>ID/td>
    td>描述/td>
    td>日期/td>
  /tr>
%
  If IsArray(arrRecordInfo) Then
   For i = 0 to UBound(arrRecordInfo, 2)
%>
  tr>
    td>nbsp;%= arrRecordInfo(0, i)%>/td>
    td>nbsp;%= arrRecordInfo(1, i)%>/td>
    td>nbsp;%= arrRecordInfo(2, i)%>/td>
  /tr>
%
   Next
  End If
%>
/table>
/div>
table width="100%" border="0" cellspacing="0" cellpadding="4">
  tr> 
  td>nbsp;%= strPageInfo%>/td>
/tr>
/table>
table width="100%" border="0" cellspacing="0" cellpadding="4">
  tr> 
    td align="center">nbsp;%= getTimeOver(1)%>/td>
  /tr>
/table>
/body>
/html>
您可能感興趣的文章:
  • 淺談mssql access數(shù)據(jù)庫(kù) top分頁(yè)方法
  • Asp.net在線備份、壓縮和修復(fù)Access數(shù)據(jù)庫(kù)示例代碼
  • ASP.NET 連接ACCESS數(shù)據(jù)庫(kù)的簡(jiǎn)單方法
  • asp.net中獲取新增加記錄的ID Access版
  • asp.net下Oracle,SQL Server,Access萬(wàn)能數(shù)據(jù)庫(kù)通用類(lèi)
  • 一個(gè)簡(jiǎn)答的Access下的分頁(yè)asp.net代碼
  • asp.net訪問(wèn)Access數(shù)據(jù)庫(kù)溢出錯(cuò)誤
  • asp.net(C#) Access 數(shù)據(jù)操作類(lèi)
  • asp.net access web.config denied
  • asp.net 數(shù)據(jù)庫(kù)備份還原(sqlserver+access)
  • asp.net access添加返回自遞增id的實(shí)現(xiàn)方法
  • asp.net和asp下ACCESS的參數(shù)化查詢(xún)
  • asp.net實(shí)現(xiàn)access數(shù)據(jù)庫(kù)分頁(yè)的方法

標(biāo)簽:咸陽(yáng) 泰州 鐵嶺 麗江 昌都 溫州 昆明 家電維修

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Access 2000 數(shù)據(jù)庫(kù) 80 萬(wàn)記錄通用快速分頁(yè)類(lèi)》,本文關(guān)鍵詞  Access,2000,數(shù)據(jù)庫(kù),萬(wàn)記錄,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Access 2000 數(shù)據(jù)庫(kù) 80 萬(wàn)記錄通用快速分頁(yè)類(lèi)》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于Access 2000 數(shù)據(jù)庫(kù) 80 萬(wàn)記錄通用快速分頁(yè)類(lèi)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章