oracle|分頁|資料|顯示 一、引言
通過瀏覽器訪問資料量大的表時需要進行分頁。ASP對資料庫記錄分頁顯示可以通過ADO對象集Recordset對象來實現。Recordset具有以下幾個用於分頁顯示的屬性:
PageSize:每頁顯示的記錄數。
PageCount:根據使用者設定好的PageSize和表中的總記錄數,系統自動算出總頁數。RecordCount:表中的總記錄數。
AbsolutePage:表示當前頁碼。如將AbsolutePage屬性設為3,則目前記錄移至第3頁第1條(也就是第31條)。
知道Recordset具有這幾個屬性後,相信大家都覺得實現記錄的分頁顯示是很簡單的。先開啟資料庫及表,再設定好PageSize和AbsolutePage,最後將記錄資料輸出到瀏覽器,就可以大功告成。誠然,使用Access或SQL server作資料庫時,就這麼簡單,因為這兩種資料庫都支援Recordset的這幾個用於分頁的屬性。與Access或SQL server相比,Oracle資料庫提供更好的安全性,並且在資料量極大的情況下效能佔優,然而Oracle並不支援這些分頁屬性。本文將介紹一種利用ASP實現對Oracle資料記錄分頁顯示的方法,使得Oracle使用者能夠輕鬆方便地實現記錄分頁顯示。
二、實現過程分析
1、 建立資料來源
安裝Oracle用戶端軟體,通過microsoft odbc for oracle驅動程式建立DSN,如:"DSN=servername;UID=user;PWD=password " 。
2、 建立資料表
簡單的設定檔表結構如下(表名為data):
data:name,Varchar2;telephone,Number;email,Varchar2;
3、程式碼分析(在此只分析記錄顯示程式display.asp)
<html>
<head>
<title>設定檔表</title>
</head>
<%
sql = "Select * From data" //sql語句,從data表中取出所有資料
//以下建立資料庫連接
Set conn = Server.CreateObject("ADODB.Connection")
Cnn.Open "dsn=servername;uid=user;pwd=password;"
Set Rs = Server.CreateObject("ADODB.Recordset")
Rs.CursorType = 3
Rs.LockType = 3
Rs.Open sql, conn
//如果沒有記錄,就退出
If Rs.EOF Then
Response.End
End If
%>
//以下顯示表頭
<p align="center">設定檔表<br></p>
<div align="center">
<center>
<table border="1" width="560" cellspacing="0" cellpadding="0">
<tr>
<td width="140" align="center">編號</td>
<td width="140" align="center">姓名</td>
<td width="140" align="center">電話</td>
<td width="140" align="center">E-mail</td>
</tr>
<%
RecordsPerPage=10 //設定每頁顯示記錄數為10條記錄
CurrentPageNumber=0 //設定當前頁號為0
INDEX=1 //設定記錄編號為1
//如果當前頁號參數不為空白,則將其類型轉換為長整型,並調用該參數
if Request.QueryString("CurrentPageNumber") <> "" then
CurrentPageNumber=CLng(Request("CurrentPageNumber"))
end if
//因為預設頁號從0開始,所以要將參數減1
CurrentPageNumber=CurrentPageNumber-1
//以下計算總的記錄條數
TotalRrecord=0
While (not Rs.EOF)
Rs.MoveNext
TotalRecord=TotalRecord+1
Wend
//以下計算總頁數TotalPageNumber
if (TotalRecord mod RecordsPerPage)=0 then
TotalPageNumber=(TotalRecord\RecordsPerPage)
else
TotalPageNumber=((TotalRecord\RecordsPerPage)+1)
end if
//如果輸入頁號參數小於0,則顯示首頁
If CurrentPageNumber<0 Then
CurrentPageNumber=0
end if
//如果輸入頁號參數大於總頁數減1,則顯示最後一頁
if CurrentPageNumber>(TotalPageNumber-1) Then
CurrentPageNumber=(TotalPageNumber-1)
end if
//記錄指標返回到第一個記錄
Rs.movefirst
//以下讓紀錄指標越過輸