版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
本文格式為Word版下載后可任意編輯和復(fù)制第第頁王力公告查詢
那么畢竟如何才能做到將數(shù)據(jù)庫的查詢結(jié)果分頁顯示呢?其實(shí)方法有許多,但主要有兩種:
一、將數(shù)據(jù)庫中全部符合查詢條件的記錄一次性的都讀入recordset中,存放在內(nèi)存中,然后通過ADORecordset對象所供應(yīng)的幾個(gè)特地支持分頁處理的屬性:PageSize(頁大小)、PageCount(頁數(shù)目)以及
AbsolutePage(肯定頁)來管理分頁處理。
二、依據(jù)客戶的指示,每次分別從符合查詢條件的記錄中將規(guī)定數(shù)目的記錄數(shù)讀取出來并顯示。兩者的主要差別在于前者是一次性將全部記錄都讀入內(nèi)存然后再依據(jù)指示來依次做推斷分析從而達(dá)到分頁顯示的效果,而后者是先依據(jù)指示做出推斷并將規(guī)定數(shù)目的符合查詢條件的記錄讀入內(nèi)存,從而直接達(dá)到分頁顯示的功能。
我們可以很明顯的感覺到,當(dāng)數(shù)據(jù)庫中的記錄數(shù)達(dá)到上萬或更多時(shí),第一種方法的執(zhí)行效率將明顯低于第二種方法,因?yàn)楫?dāng)每一個(gè)客戶查詢頁面時(shí)都要將全部符合條件的記錄存放在服務(wù)器內(nèi)存中,然后在進(jìn)行分頁等處理,假如同時(shí)有超過100個(gè)的客戶在線查詢,那么ASP應(yīng)用程序的執(zhí)行效率將大受影響。但是,當(dāng)服務(wù)器上數(shù)據(jù)庫的記錄數(shù)以及同時(shí)在線的人數(shù)并不是許多時(shí),兩者在執(zhí)行效率上是相差無幾的,此時(shí)一般就采納第一種方法,因?yàn)榈谝环N方法的ASP程序編寫相對第二種方法要簡潔明白得多。
在這里就以我們常見的ASPBBS程序?yàn)槔?,來給大家分析一下如何在BBS程序里實(shí)現(xiàn)分頁顯示功能,由于我們一般使用的BBS程序的數(shù)據(jù)庫記錄數(shù)和同時(shí)訪問的人數(shù)都不會(huì)太多,所以以下程序?qū)嵗鞘褂玫膹那八榻B的第一種分頁顯示方法。
進(jìn)行ADO存取數(shù)據(jù)庫時(shí)的分頁顯示,其實(shí)就是對Recordset的記錄進(jìn)行操作。所以我們首先必需了解Reordset對象的屬性和方法:
BOF屬性:目前指標(biāo)指到RecordSet的第一筆。
EOF屬性:目前指標(biāo)指到RecordSet的最終一筆。
Move方法:移動(dòng)指標(biāo)到RecordSet中的某一條記錄。
AbsolutePage屬性:設(shè)定當(dāng)前記錄的位置是位于哪一頁
AbsolutePosition屬性:目前指標(biāo)在RecordSet中的位置。
PageCount屬性:顯示Recordset對象包括多少“頁”的數(shù)據(jù)。
PageSize屬性:顯示Recordset對象每一頁顯示的記錄數(shù)。
RecordCount屬性:顯示Recordset對象記錄的總數(shù)。
下面讓我們來具體熟悉一下這些重要的屬性和方法
一、BOF與EOF屬性
通常我們在ASP程序中編寫代碼來檢驗(yàn)BOF與EOF屬性,從而得知目前指標(biāo)所指向的RecordSet的位置,使用BOF與EOF屬性,可以得知一個(gè)Recordset對象是否包含有記錄或者得知移動(dòng)記錄行是否已經(jīng)超出該ecordset對象的范圍。
如:%ifnotrs.eofthen...%
%ifnot(rs.bofandrs.eof)%
若當(dāng)前記錄的位置是在一個(gè)Recordset對象第一行記錄之前時(shí),BOF屬性返回true,反之則返回false。若當(dāng)前記錄的位置是在一個(gè)Recordset對象最終一行記錄之后時(shí),EOF屬性返回true,反之則返回false。BOF與EOF都為False:表示指標(biāo)位于RecordSet的當(dāng)中。BOF為True:目前指標(biāo)指到RecordSet
的第一筆記錄。EOF為True:目前指標(biāo)指到RecordSet的最終一筆記錄。BOF與EOF都為True:在RecordSet里沒有任何記錄。
二、Move方法
您可以用Move方法移動(dòng)指標(biāo)到RecordSet中的某一筆記錄,語法如下:rs.MoveNumRecords,Start
這里的“rs”為一個(gè)對象變量,表示一個(gè)想要移動(dòng)當(dāng)當(dāng)前記錄位置的Recordset對象;“NumRecords”是一個(gè)正負(fù)數(shù)運(yùn)算式,設(shè)定當(dāng)前記錄位置的移動(dòng)數(shù)目;“start”是一個(gè)可選的項(xiàng)目,用來指定記錄起始的標(biāo)簽。全部的Recordset對象都支持Move方法,假如NumRecords參數(shù)大于零,當(dāng)前記錄位置向末尾的方向移動(dòng);假如其小于零,則當(dāng)前記錄位置向開頭的方向移動(dòng);假如一個(gè)空的Recordset對象調(diào)用Move方法,將會(huì)產(chǎn)生一個(gè)錯(cuò)誤。
MoveFirst方法:將當(dāng)前記錄位置移至第一筆記錄。
MoveLast方法:將當(dāng)前記錄位置移至最終一筆記錄。
MoveNext方法:將當(dāng)前記錄位置移至下一筆記錄。
MovePrevious方法:將當(dāng)前記錄位置移至上一筆記錄。
Move[n]方法:移動(dòng)指標(biāo)到第n筆記錄,n由0算起。
三、AbsolutePage屬性
AbsolutePage屬性設(shè)定當(dāng)前記錄的位置是位于哪一頁的頁數(shù)編號;使用PageSize屬性將Recordset對象分割為規(guī)律上的頁數(shù),每一頁的記錄數(shù)為PageSize(除了最終一頁可能會(huì)有少于PageSize的記錄數(shù))。這里必需留意并不是全部的數(shù)據(jù)供應(yīng)者都支持此項(xiàng)屬性,因此使用時(shí)要當(dāng)心。與AbsolutePosition屬性相同,AbsolutePage屬性是以1為起始的,若當(dāng)前記錄為Recordset的第一行記錄,AbsolutePage為1??梢栽O(shè)定AbsolutePage屬性,以移動(dòng)到一個(gè)指定頁的第一行記錄位置。
四、AbsolutePosition屬性
若您需要確定目前指標(biāo)在RecordSet中的位置,您可以用AbsolutePosition屬性。AbsolutePosition屬性的數(shù)值為目前指標(biāo)相對於第一筆的位置,由1算起,即第一筆的AbsolutePosition為1。留意,在存取RecordSet時(shí),無法保證RecordSet每次都以同樣的挨次消失。若要啟用AbsolutePosition,必需先設(shè)定為使用用戶端cursor(指針),asp碼如下:rs2.CursorLocation=3
五、PageCount屬性
使用PageCount屬性,打算Recordset對象包括多少“頁”的數(shù)據(jù)。這里的“頁”是數(shù)據(jù)記錄的集合,大小等于PageSize屬性的設(shè)定,即使最終一頁的記錄數(shù)比PageSize的值少,最終一頁也算是PageCount的一頁。
必需留意也并不是全部的數(shù)據(jù)供應(yīng)者都支持此項(xiàng)屬性。
六、PageSize屬性
PageSize屬性是打算ADO存取數(shù)據(jù)庫時(shí)如何分頁顯示的關(guān)鍵,使用它就可以打算多少記錄組成一個(gè)規(guī)律上的“一頁”。設(shè)定并建立一個(gè)頁的大小,從而允許使用AbsolutePage屬性移到其它規(guī)律頁的第一條記錄。PageSize屬性能隨時(shí)被設(shè)定。
七、RecordCount屬性
這也是一個(gè)特別常用和重要的屬性,我們常用RecordCount屬性來找出一個(gè)Recordset對象包括多少條記錄。如:
%totle=RS.RecordCount%
在了解了Recordset對象的以上屬性和方法后,我們來考慮一下,如何運(yùn)用它們來達(dá)到我們分頁顯示的目的。首先,我們可以為PageSize屬性設(shè)置一個(gè)值,從而指定從記錄組中取出的構(gòu)成一個(gè)頁的行數(shù);然后通過RecordCount屬性來確定記錄的總數(shù);再用記錄總數(shù)除以PageSize就可得到所顯示的頁面總數(shù);最終通過AbsolutePage屬性就能完成對指定頁的訪問好象很并不簡單呀,下面讓我們來看看程序該如何實(shí)現(xiàn)呢?
我們建立這樣一個(gè)簡潔的BBS應(yīng)用程序,它的數(shù)據(jù)庫中分別有以下五個(gè)字段:“ID”,每個(gè)帖子的自動(dòng)編號;“subject”,每個(gè)帖子的主題;“name”,加帖用戶的姓名;“email”,用戶的電子郵件地址;“postdate”,加帖的時(shí)間。數(shù)據(jù)庫的DSN為“bbs”。我們將顯示帖子分頁的全部步驟放在一個(gè)名為“ShowList()”的過程中,便利調(diào)用。程序如下:
\BBS顯示帖子分頁
%SubShowList()%
%
PgSz=20\設(shè)定開關(guān),指定每一頁所顯示的帖子數(shù)目,默認(rèn)為20帖一頁SetConn=Server.CreateObject(\ADODB.Connection\)
SetRS=Server.CreateObject(\ADODB.RecordSet\)
sql=\SELECT*FROMmessageorderbyIDDESC\
\查詢?nèi)刻?,并按帖子的ID倒序排列
Conn.Open\bbs\
RS.opensql,Conn,1,1
IfRS.RecordCount=0then
response.write\Pcenter對不起,數(shù)據(jù)庫中沒有相關(guān)信息!
/center/P\
else
RS.PageSize=Cint(PgSz)\設(shè)定PageSize屬性的值
Total=INT(RS.recordcount/PgSz*-1)*-1\計(jì)算可顯示頁面的總數(shù)
PageNo=Request(\pageno\)
ifPageNo=\\Then
PageNo=1
else
PageNo=PageNo+1
PageNo=PageNo-1
endif
ScrollAction=Request(\ScrollAction\)
ifScrollAction=\上一頁\Then
PageNo=PageNo-1
endif
ifScrollAction=\下一頁\Then
PageNo=PageNo+1
endif
ifPageNo1Then
PageNo=1
endif
RS.AbsolutePage=PageNo
Response.Write\CENTER\
position=RS.PageSize*PageNo
pagebegin=position-RS.PageSize+1
ifpositionRS.RecordCountthen
pagend=position
else
pagend=RS.RecordCount
endif
Response.Write\Pfontcolor=\Navy\B數(shù)據(jù)庫查詢結(jié)果:/B\Response.Write\(共有\(zhòng)RS.RecordCount\條符合條件的信息,
顯示\pagebegin\-\pagend\)/font/p\
Response.Write\TABLEWIDTH=600BORDER=1CELLPADDING=4CELLSPACING=0BGCOLOR=#FFFFFF\
Response.Write\TRBGCOLOR=#5FB5E2FONTSIZE=2TDB主題/B/TDTDB用戶/B/TDTDBEmail/B/TDTDB發(fā)布日期/B/TD/FONTBGCOLOR=#FFFFFF\
Dowhilenot(RSisnothing)
RowCount=RS.PageSize
DoWhileNotRS.EOFandrowcount0
Ifn=1then
Response.Write\TRBGCOLOR=#FFFFFF\
ELSE
Response.Write\TRBGCOLOR=#EEEEEE\
EndIf
n=1-n%
TDspanstyle=\font-size:9pt\
Ahref=\view.asp?key=%=RS(\ID\)%\%=RS(\subject\)%/A/span/td
TDspanstyle=\font-size:9pt\
%=RS(\name\)%/A/span/td
TDspanstyle=\font-size:9pt\
ahref=\mailto:%=RS(\email\)%\%=RS(\email\)%/a/span/TD
TDspanstyle=\font-size:9pt\
%=RS(\postdate\)%/span/td
/TR
%
RowCount=RowCount-1
RS.MoveNext
Loop
setRS=RS.NextRecordSetTR
Conn.Close
setrs=nothing
setConn=nothing
%
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 河北省秦皇島市2025屆高考英語考前最后一卷預(yù)測卷含解析
- 2025屆湖南省常德市武陵區(qū)芷蘭實(shí)驗(yàn)學(xué)校歷史班高三第二次聯(lián)考語文試卷含解析
- 《證券投資與分析》課件
- 10.1《勸學(xué)》課件 2024-2025學(xué)年統(tǒng)編版高中語文必修上冊-4
- 現(xiàn)代學(xué)徒制課題:中國特色學(xué)徒制發(fā)展動(dòng)力機(jī)制研究(附:研究思路模板、可修改技術(shù)路線圖)
- 專題06 閱讀理解(單選)說明文20篇(解析版)-2024-2025學(xué)年七年級英語上學(xué)期期末名校真題進(jìn)階練(深圳專用)
- 2025屆宜春市重點(diǎn)中學(xué)高三沖刺模擬語文試卷含解析
- 黑龍江省雞西虎林市東方紅林業(yè)局2025屆高考臨考沖刺語文試卷含解析
- 2025屆江西省贛州市崇義中學(xué)高三適應(yīng)性調(diào)研考試數(shù)學(xué)試題含解析
- 2025屆陜西省渭南韓城市高三壓軸卷數(shù)學(xué)試卷含解析
- 治療用碘131I化鈉膠囊-臨床用藥解讀
- 2024人教版五年級上冊數(shù)學(xué)期末口算題訓(xùn)練
- 2024外研版初中英語單詞表匯總(七-九年級)中考復(fù)習(xí)必背
- 安徽省合肥市包河區(qū)2023-2024學(xué)年三年級上學(xué)期期末英語試卷
- 勞動(dòng)爭議調(diào)解仲裁法
- 城鎮(zhèn)歷史與遺產(chǎn)保護(hù)智慧樹知到期末考試答案2024年
- 【培訓(xùn)課件】醫(yī)療機(jī)構(gòu)從業(yè)人員行為規(guī)范
- 車間生產(chǎn)中的質(zhì)量問題與質(zhì)量改進(jìn)
- 危巖治理施工方案
- 同等學(xué)力申碩-同等學(xué)力(社會(huì)學(xué))筆試(2018-2023年)真題摘選含答案
- 疾病健康宣教的課件
評論
0/150
提交評論