ADO 存取資料庫時的分頁顯示詳

來源:互聯網
上載者:User
ado|分頁|資料|資料庫|顯示 什麼是 ADO 存取資料庫時的分頁顯示?如果你使用過目前眾多網站上的電

子公告板程式的話,那你應該會知道電子公告板程式為了提高頁面的讀取速度,

一般不會將所有的文章全部在一頁中羅列出來,而是將其分成多頁顯示,每頁
顯示一定數目的貼文數,譬如 20 條。想不想瞭解如何?分頁顯示?請看
本文!
  那麼究竟如何才能做到將資料庫的查詢結果分頁顯示呢?其實方法有很多,

但主要有兩種:
  一、將資料庫中所有符合查詢條件的記錄一次性的都讀入 recordset 中,

存放在記憶體中,然後通過 ADO Recordset 對象所提供的幾個專門支援分頁處
理的屬性: PageSize( 頁大小 )、 PageCount( 頁數目 ) 以及
AbsolutePage( 絕對頁 ) 來管理分頁處理。
  二、根據客戶的指示,每次分別從符合查詢條件的記錄中將規定數目的記
錄數讀取出來並顯示。
  兩者的主要差別在於前者是一次性將所有記錄都讀入記憶體然後再根據指示
來依次做判斷分析從而達到分頁顯示的效果,而後者是先根據指示做出判斷並
將規定數目的符合查詢條件的記錄讀入記憶體,從而直接達到分頁顯示的功能。

  我們可以很明顯的感覺到,當資料庫中的記錄數達到上萬或更多時,第一
種方法的執行效率將明顯低於第二種方法,因為當每一個客戶查詢頁面時都要
將所有合格記錄存放在伺服器記憶體中,然後在進行分頁等處理,如果
同時有超過 100 個的客戶線上查詢,那麼 ASP 應用程式的執行效率將大受
影響。但是,當伺服器上資料庫的記錄數以及同時線上的人數並不是很多時,
兩者在執行效率上是相差無幾的,此時一般就採用第一種方法,因為第一種
方法的 ASP 程式編寫相對第二種方法要簡單明了得多。
  在這裡作者就以我們常見的 ASP BBS 程式為例,來給大家分析一下如何
在 BBS 程式裡實現分頁顯示功能,由於我們一般使用的 BBS 程式的資料庫
記錄數和同時訪問的人數都不會太多,所以以下程式執行個體是使用的先前所介紹
的第一種分頁顯示方法。
   進行 ADO 存取資料庫時的分頁顯示,其實就是對 Recordset 的記錄
進行操作。所以我們首先必須瞭解 Reordset 對象的屬性和方法:
   BOF 屬性:目前指標指到 RecordSet 的第一筆。
   EOF 屬性:目前指標指到 RecordSet 的最後一筆。
   Move 方法:移動指標到 RecordSet 中的某一條記錄。
   AbsolutePage 屬性:設定目前記錄的位置是位於哪一頁
AbsolutePosition 屬性:目前指標在 RecordSet 中的位置。
   PageCount 屬性:顯示 Recordset 對象包括多少“頁”的資料。
   PageSize 屬性:顯示 Recordset 對象每一頁顯示的記錄數。
   RecordCount 屬性:顯示 Recordset 對象記錄的總數。
   下面讓我們來詳細認識一下這些重要的屬性和方法
   一、 BOF 與 EOF 屬性
   通常我們在 ASP 程式中編寫代碼來檢驗 BOF 與 EOF 屬性,從而得知
目前指標所指向的 RecordSet 的位置,使用 BOF 與 EOF 屬性,可以得知
一個 Recordset 對象是否包含有記錄或者得知移動記錄行是否已經超出該
Recordset 對象的範圍。
   如: < % if not rs.eof then ... %>
   < % if not (rs.bof and rs.eof) %>
  若目前記錄的位置是在一個 Recordset 對象第一行記錄之前時, BOF
屬性返回 true,反之則返回 false。
  若目前記錄的位置是在一個 Recordset 對象最後一行記錄之後時,
EOF 屬性返回 true,反之則返回 false。
  BOF 與 EOF 都為 False:表示指標位於 RecordSet 的當中。
  BOF 為 True:目前指標指到 RecordSet 的第一筆記錄。
EOF 為 True:目前指標指到 RecordSet 的最後一筆記錄。
  BOF 與 EOF 都為 True:在 RecordSet 裡沒有任何記錄。
  二、 Move 方法
  您可以用 Move 方法移動指標到 RecordSet 中的某一筆記錄,文法如下:

  rs.Move NumRecords,Start
  這裡的“rs”為一個物件變數,表示一個想要移動噹噹前記錄位置的
Recordset 對象;“NumRecords”是一個正負數運算式,設定目前記錄位置
的移動數目;“start”是一個可選的項目,用來指定記錄起始的標籤。
   所有的 Recordset 對象都支援 Move 方法,如果 NumRecords 參數
大於零,目前記錄位置向末尾的方向移動;如果其小於零,則目前記錄位置
向開頭的方向移動;如果一個空的 Recordset 對象調用 Move 方法,將會
產生一個錯誤。
   MoveFirst 方法:將目前記錄位置移至第一筆記錄。
   MoveLast 方法:將目前記錄位置移至最後一筆記錄。
   MoveNext 方法:將目前記錄位置移至下一筆記錄。
MovePrevious 方法:將目前記錄位置移至上一筆記錄。
   Move [n] 方法:移動指標到第 n 筆記錄, n 由 0 算起。
  三、 AbsolutePage 屬性
  AbsolutePage 屬性設定目前記錄的位置是位於哪一頁的頁數編號;
使用 PageSize 屬性將 Recordset 對象分割為邏輯上的頁數,每一頁的記錄
數為 PageSize( 除了最後一頁可能會有少於 PageSize 的記錄數 )。這裡
必須注意並不是所有的資料提供者都支援此項屬性,因此使用時要小心。
  與 AbsolutePosition 屬性相同, AbsolutePage 屬性是以 1 為起始
的,若目前記錄為 Recordset 的第一行記錄, AbsolutePage 為 1。可以
設定 AbsolutePage 屬性,以移動到一個指定頁的第一行記錄位置。
  四、 AbsolutePosition 屬性
  若您需要確定目前指標在 RecordSet 中的位置,您可以用
AbsolutePosition 屬性。
  AbsolutePosition 屬性的數值為目前指標相對於第一筆的位置,由 1
算起,即第一筆的 AbsolutePosition 為 1。
  注意 , 在存取 RecordSet 時,無法保證 RecordSet 每次都以同樣的
順序出現。
  若要啟用 AbsolutePosition,必須先設定為使用使用者端
cursor( 指標 ), asp 碼如下:
  rs2.CursorLocation = 3
  五、 PageCount 屬性
  使用 PageCount 屬性,決定 Recordset 對象包括多少“頁”的資料。
這裡的“頁”是資料記錄的集合,大小等於 PageSize 屬性的設定,即使最後
一頁的記錄數比 PageSize 的值少,最後一頁也算是 PageCount 的一頁。
必須注意也並不是所有的資料提供者都支援此項屬性。
  六、 PageSize 屬性
  PageSize 屬性是決定 ADO 存取資料庫時如何分頁顯示的關鍵,使用它
就可以決定多少記錄組成一個邏輯上的“一頁”。設定並建立一個頁的大小,
從而允許使用 AbsolutePage 屬性移到其它邏輯頁的第一條記錄。
PageSize 屬效能隨時被設定。
  七、 RecordCount 屬性
  這也是一個非常常用和重要的屬性,我們常用 RecordCount 屬性來找出
一個 Recordset 對象包括多少條記錄。如:
< % totle=RS.RecordCount %>
  在瞭解了 Recordset 對象的以上屬性和方法後,我們來考慮一下,
如何運用它們來達到我們分頁顯示的目的。首先,我們可以為 PageSize 屬性
設定一個值,從而指定從屬記錄組中取出的構成一個頁的行數;然後通過
RecordCount 屬性來確定記錄的總數;再用記錄總數除以 PageSize 就可得
到所顯示的頁面總數;最後通過 AbsolutePage 屬性就能完成對指定頁的訪問
好象很並不複雜呀,下面讓我們來看看程式該如何?呢?
  我們建立這樣一個簡單的 BBS 應用程式,它的資料庫中分別有以下五個
欄位:“ID”,每個文章的自動編號;“subject”,每個文章的主題;
“name”,加帖使用者的姓名;“email”,使用者的電子郵件地址;
“postdate”,加帖的時間。資料庫的 DSN 為“bbs”。我們將顯示文章
分頁的所有步驟放在一個名為“ShowList()”的過程中,方便調用。
程式如下:

'----BBS 顯示文章分頁----
< % Sub ShowList() %>
< %
PgSz=20 '設定開關,指定每一頁所顯示的貼文數目,預設為20帖一頁
Set Conn = Server.CreateObject("ADODB.Connection")



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。