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

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

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    利用ASP實現對表的分頁瀏覽

    發布: 2007-9-07 19:42 | 作者: Paladin | 來源: eNet論壇 | 查看: 24次 | 進入軟件測試論壇討論

    領測軟件測試網 大家都知道,ASP有著強大的數據庫操作能力,這與她能方便的調用ActiveX對象是密不可分的。下面我給大家介紹一種ASP利用ADO對象實現對數據庫記錄分頁顯示的方法。以下代碼均在WIN98+PWS+MSACCESS環境下通過。
      在這里我主要通過ADO對象集中的Recordset對象來實現各種數據庫操作的。先介紹幾個用于分頁顯示的Recordset屬性。

        PageSize:每頁顯示的記錄數。

        PageCount:根據用戶設好的PageSize和表中的總記錄數,系統自動算出總頁數。

        RecordCount:表中的總記錄數。

        AbsolutePage:表示當前頁碼。如將AbsolutePage屬性設為3,則當前記錄移至第3頁第1條(也就是第31條)。

      看到Recordset有了這幾個屬性后,相信大家也都覺得做一個分頁顯示的程序是很簡單的。下面講一下思路,所有實現這一功能的代碼都放在display.asp中,按執行的順序分別是:打開數據庫及表、讀取用戶要求的顯示方式、設定好PageSize和AbsolutePage、將內容輸出到瀏覽器、設定好導航條。以下是代碼:


    <%'---------------------------打開數據庫及表
    set conn=server.createobject("ADODB.Connection")
    filepath=server.mappath("abc.mdb") '-------假設數據庫文件是"abc.mdb"
    conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" amp; filepath
    set rs=server.createobject("ADODB.Recordset")
    rs.open "main",conn,3,2 '-------假設表的名字是"main"
    %>
    <%'---------------------------讀取用戶要求的顯示方式(通過參數傳遞)
    line=cint(request("line"))
    page=cint(request("page"))
    %>
    <%'---------------------------按用戶要求設定好顯示方式
    rs.PageSize=line
    rs.AbsolutePage=page
    %>
    <%'---------------------------顯示內容%>
    <table width="100%" border="1">
    <tr>
    <%for i=0 to rs.Fields.Count-1%>
    <td><%=rs.Fields(i).name%></td>
    <%next%>
    </tr><%'-------以上部分顯示表頭,即字段名%>
    <%for i=1 to rs.PageSize%>
    <tr>
    <%for j=0 to rs.Fields.Count-1%>
    <td><%=rs.Fields(j).value%></td>
    <%next%>
    </tr>
    <%rs.movenext%>
    <%if rs.eof then exit for%>
    <%next%><%'-------以上部分顯示表的內容%>
    </table>

    <%'---------------------------導航條%>
    <table width=100% ><tr>
    <td>
    <%if page<>1 then%>
    <a href=display.asp?page=1amp;line=<%=line%>>第一頁</a>
    <%else%>第一頁<%end if%>

    </td>
    <td>
    <%if page>1 then%>
    <a href=display.asp?page=<%=page-1%>amp;line=<%=line%>>前一頁</a>
    <%else%>前一頁<%end if%>
    </td>
    <td>
    <%if page<rs.PageCount then%>
    <a href=display.asp?page=<%=page+1%>amp;line=<%=line%>>下一頁
    <%else%>下一頁<%end if%>
    </td>
    <td>
    <%if page<>rs.PageCount then%>
    <a href=display.asp?page=<%=rs.PageCount%>amp;line=<%=line%>>最后一頁</a>
    <%else%>最后一頁<%end if%>
    </td><%'-------以上四項都需要進行判斷:如果在第一頁就不提供“第一頁”和“前一頁”的鏈接
    '-------如果在最后一頁就不提供“最后一頁”和“后一頁”的鏈接%>
    <td>
    <form method="POST" action="display.asp?line=<%=line%>">
    請輸入頁碼:<input type="text" name="page" size="3" value="<%=page%>">
    </form>
    </td>
    <td>
    <form method="POST" action="display.asp?page=<%=page%>">
    請設定每頁<input type="text" name="line" size="3" value="<%=line%>">行
    </form>
    </td><%'-------因為兩個表單都只有一個表單域,所以沒有提供發送按鈕,直接打回車就行了%>
    <td>
    第<%=page%>頁/總<%=rs.PageCount%>頁
    </td>

    </tr></table>



      這只是一個最基本的程序,沒有進行優化處理,也還有一些bug,下面我們一起來使它更“完美”一些。

    一.關于參數傳遞。假如表中有46條記錄,然后我們在地址欄中敲入http.//localhost/display.asp?line=10page=2(假設這是正確的路徑)肯定瀏覽器將給我們顯示第二頁的十條記錄。但是如果在地址欄中只敲入http.//localhost/display.asp,瀏覽器卻給我們一個出錯信息。如何解決呢?我們必須在讀取這些參數時加一個判斷,如果參數是空的,就賦給它一個初值,以防出錯。將“讀取用戶要求的顯示方式”部分用以下代碼代替:


    <%
    if request("page")<>"" then
    page=cint(request("page"))
    else
    page=1 '-------如果參數page為空,就給它賦值1
    end if
    if request("line")<>"" then
    line=cint(request("line"))
    else
    line=10 '-------如果參數line為空,就給它賦值10
    end if
    %>


      二.參數的合理性問題。如果我們在地址欄中敲入http.//localhost/display.asp?line=20page=4會出現什么情況呢?瀏覽器報錯。因為表中只有46條記錄,而我們要它以每頁顯示二十條,第四頁的二十條記錄,也就是第六十一條到第八十條記錄。顯然會出錯。同樣情況還會出現在導航條中,如果當前瀏覽器中顯示的是以每頁十條,第四頁的內容,我們去設定它以每頁二十條顯示,同樣也會出錯。解決方法還是一樣的,先判斷一下參數的合理性,然后再設置顯示方式。將“按用戶要求設定好顯示方式”部分用以下代碼代替。

    <%
    if page>(rs.RecordCount-1)\line+1 then
    '-------通過計算可知,最大頁數=(總記錄數-1)\每頁行數+1
    response.write("error!") '-------如果參數不合實際,輸出"error!"
    response.end '-------終止程序
    end if
    rs.PageSize=line
    rs.AbsolutePage=page

    %>


      三.驗證表單域。導航條中的兩個輸入文本框輸入的都必須是整數,否則也會出錯。我們可以利用FrontPage的驗證表單域功能開完成,這里就不多說了。

      四.優化。到目前為止,這個程序還有一個缺點。在數據庫的存取過程中,最花時間的要數是數據庫的打開和Recordset對象的建立,而這個程序每次執行都會打開數據庫及建立Recordset對象,極大的降低了效率,一旦訪問量增大,這個程序也就是去了價值。解決的辦法是:第一次執行程序時,打開數據庫及建立Recordset對象,并將這些存在session中,下次執行時直接將session中的值返回就行了。用以下代碼代替“打開數據庫及表”部分。

    <%
    if not isobject(session("conn")) then
    set conn=server.createobject("ADODB.Connection")
    filepath=server.mappath("abc.mdb")
    conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" amp; filepath
    set rs=server.createobject("ADODB.Recordset")
    rs.open "main",conn,3,2
    set session("conn")=conn
    set session("rs")=rs
    else
    set conn=session("conn")
    set rs=session("rs")
    end if
    %>

     

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品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>