• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • Access 2000 數據庫 80 萬記錄通用快速分頁類

    發表于:2007-06-30來源:作者:點擊數: 標簽:
    作者:蕭月痕(xiaoyuehen) 地址:http://blog.csdn.net/xiaoyuehen/archive/2005/01/17/257202.aspx 轉貼請包含相關信息, 謝謝. 主要思路: 用一條語句統計(Count)出記錄數(而不在查詢時獲得 RecordCount 屬性), 緩存在 Cookies 中, 跳轉時就不用再次統計, 分頁
    作者:蕭月痕(xiaoyuehen)
    地址:http://blog.csdn.net/xiaoyuehen/archive/2005/01/17/257202.aspx
    轉貼請包含相關信息, 謝謝.

    主要思路: 用一條語句統計(Count)出記錄數(而不在查詢時獲得 RecordCount 屬性), 緩存在 Cookies 中, 跳轉時就不用再次統計, 分頁跳轉鏈接也由此來, 使用 ADO 的 AbsolutePage 屬性設置當前頁面, 返回intPageSize 條記錄. 為方便調用而寫成類, 代碼主要地方已有說明

    硬件環境: AMD Athlon XP 2600+, 256 DDR
    軟件環境: MS Windows 2000 Advanced Server + IIS 5.0 + Aclearcase/" target="_blank" >ccess 2000 + IE 6.0
    測試結果: 初次運行在 250(首頁) - 400(末頁)毫秒, (記錄數緩存后)在頁面間跳轉穩定在 47 毫秒以下.第1頁跳到最后一頁不多于 350 毫秒

    適用范圍: 用于普通分頁. 不適用于有較復雜的查詢時: 如條件為"[Title] Like @#%最愛%@#", 查詢的時間大大增加, 就算 Title 字段作了索引也沒用. :(

    <%@LANGUAGE = "VBScript" CODEPAGE="936"%>
    <%Option Explicit%>
    <%
    Dim intDateStart
    intDateStart = Timer()
    Rem ## 打開數據庫連接
    Rem #################################################################
    function f__OpenConn()
    Dim strDbPath
    Dim connstr
    strDbPath = "../db/test.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 #################################################################
    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 ## 保存記錄數的 Cookies 變量
    Public Property Let strCookiesName(Value)
    sstrCookiesName = Value
    End Property

    Rem ## 轉向地址
    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 ## 查詢條件
    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 ## 用于統計記錄數的字段
    Public Property Let strPrimaryKey(Value)
    sstrPrimaryKey = 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 strPageVar(Value)
    sstrPageVar = Value
    End Property

    Rem ## 是否刷新. 1 為刷新, 其他值則不刷新
    Public Property Let intRefresh(Value)
    sintRefresh = toNum(Value, 0)
    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()
    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 ## 初始化記錄數
    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 ## 初始化分頁信息
    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 = "首頁 上一頁"
    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
    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 = "[myTable]"
    clsRecordInfo.strPageUrl = strLocalUrl
    clsRecordInfo.strFieldsList = "[ID], [Title], [LastTime]"
    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>分頁測試</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>

    這里將所有代碼集中在一起是為了敘述和測試方便, 具體應用你可以將類放在單獨一個文件, 然后多處調用. 請將適當的時候判斷用戶是否進行請求, 更改 intRefresh, 以便告知分頁類是否重新統計記錄數.

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>