王力公告查詢_第1頁
王力公告查詢_第2頁
王力公告查詢_第3頁
王力公告查詢_第4頁
王力公告查詢_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論