|
大家都知道,ASP有著強(qiáng)大的數(shù)據(jù)庫操作能力,這與她能方便的調(diào)用ActiveX對象是密不可分的。下面我給大家介紹一種ASP利用ADO對象實(shí)現(xiàn)對數(shù)據(jù)庫記錄分頁顯示的方法。以下代碼均在WIN98+PWS+MSACCESS環(huán)境下通過。
在這里我主要通過ADO對象集中的Recordset對象來實(shí)現(xiàn)各種數(shù)據(jù)庫操作的。先介紹幾個用于分頁顯示的Recordset屬性。
PageSize:每頁顯示的記錄數(shù)。
PageCount:根據(jù)用戶設(shè)好的PageSize和表中的總記錄數(shù),系統(tǒng)自動算出總頁數(shù)。
RecordCount:表中的總記錄數(shù)。
AbsolutePage:表示當(dāng)前頁碼。如將AbsolutePage屬性設(shè)為3,則當(dāng)前記錄移至第3頁第1條(也就是第31條)。
看到Recordset有了這幾個屬性后,相信大家也都覺得做一個分頁顯示的程序是很簡單的。下面講一下思路,所有實(shí)現(xiàn)這一功能的代碼都放在display.asp中,按執(zhí)行的順序分別是:打開數(shù)據(jù)庫及表、讀取用戶要求的顯示方式、設(shè)定好PageSize和AbsolutePage、將內(nèi)容輸出到瀏覽器、設(shè)定好導(dǎo)航條。以下是代碼:
<%'---------------------------打開數(shù)據(jù)庫及表 set conn=server.createobject("ADODB.Connection") filepath=server.mappath("abc.mdb") '-------假設(shè)數(shù)據(jù)庫文件是"abc.mdb" conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & filepath set rs=server.createobject("ADODB.Recordset") rs.open "main",conn,3,2 '-------假設(shè)表的名字是"main" %> <%'---------------------------讀取用戶要求的顯示方式(通過參數(shù)傳遞) line=cint(request("line")) page=cint(request("page")) %> <%'---------------------------按用戶要求設(shè)定好顯示方式 rs.PageSize=line rs.AbsolutePage=page %> <%'---------------------------顯示內(nèi)容%> <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%><%'-------以上部分顯示表的內(nèi)容%> </table>
<%'---------------------------導(dǎo)航條%> <table width=100% ><tr> <td> <%if page<>1 then%> <a href=display.asp?page=1&line=<%=line%>>第一頁</a> <%else%>第一頁<%end if%>
</td> <td> <%if page>1 then%> <a href=display.asp?page=<%=page-1%>&line=<%=line%>>前一頁</a> <%else%>前一頁<%end if%> </td> <td> <%if page<rs.PageCount then%> <a href=display.asp?page=<%=page+1%>&line=<%=line%>>下一頁 <%else%>下一頁<%end if%> </td> <td> <%if page<>rs.PageCount then%> <a href=display.asp?page=<%=rs.PageCount%>&line=<%=line%>>最后一頁</a> <%else%>最后一頁<%end if%> </td><%'-------以上四項都需要進(jìn)行判斷:如果在第一頁就不提供“第一頁”和“前一頁”的鏈接 '-------如果在最后一頁就不提供“最后一頁”和“后一頁”的鏈接%> <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%>"> 請設(shè)定每頁<input type="text" name="line" size="3" value="<%=line%>">行 </form> </td><%'-------因為兩個表單都只有一個表單域,所以沒有提供發(fā)送按鈕,直接打回車就行了%> <td> 第<%=page%>頁/總<%=rs.PageCount%>頁 </td>
</tr></table>
這只是一個最基本的程序,沒有進(jìn)行優(yōu)化處理,也還有一些bug,下面我們一起來使它更“完美”一些。
|