解決ASP Recordset 分頁(yè)出現(xiàn)負(fù)數(shù)_ASP教程
推薦:ASP實(shí)例教程:FileSystemObject對(duì)象FileSystemObject 對(duì)象 指定的文件存在嗎? 本例演示如何首先創(chuàng)建FileSystemObject對(duì)象,然后使用FileExists方法來(lái)探測(cè)某文件是否存在。 本示例代碼如下: 以下為引用的內(nèi)容: html body % Set fs=Server.CreateObject(Scripting.FileSystemObject) If (fs.F
對(duì)于Recordset分頁(yè)時(shí)出現(xiàn)負(fù)數(shù)的現(xiàn)象,相信會(huì)有很多人遇到過(guò)這個(gè)問(wèn)題,有時(shí)百度、GOOGLE也不得其解,現(xiàn)在由我來(lái)總結(jié)一下。
出現(xiàn)負(fù)數(shù),主要和游標(biāo)類型有關(guān)系。(為舉例方便,假設(shè)已經(jīng)有一個(gè)conn.asp鏈接數(shù)據(jù)庫(kù)的文件并且已經(jīng)include)現(xiàn)在舉一個(gè)例子,代碼如下:
'=======================================================
sql="Select * from 表名 where 條件 order by ID desc" '這里的order by 條件可根據(jù)自己需要改寫
Set rs=conn.execute(sql) '===注意一下這一句===
rs.pagesize=10 '===設(shè)置每頁(yè)的記錄數(shù)為10===
page=request.querystring("page")
If page="" Then page=1
If Not IsNumeric(page) Then page=1
page=clng(page)
If page<1 Then page=1
If page>rs.pagecount Then page=Vrs.pagecount
rs.absolutepage=page
dim c
c=1
Do while Not rs.eof And c<=rs.pagecount
'輸出內(nèi)容
c=c+1
rs.movenext
Loop
'做頁(yè)面的鏈接
'=======================================================
根據(jù)上面的代碼,RecordSet對(duì)象直接由代碼:Set rs=conn.execute(sql),使用該句后,RecordSet對(duì)象默認(rèn)的游標(biāo)為0,即游標(biāo)只能向前滾動(dòng),鎖定類型為0,表示只讀鎖定,不能更新RecordSet對(duì)象。
所以,對(duì)于分頁(yè)時(shí)如果出現(xiàn)負(fù)數(shù),則檢查RecordSet對(duì)象是否寫為以上形式,要寫成:
Set rs=Server.CreateObject("adodb.recordset")
rs.open sql,conn,1,3
以上表示游標(biāo)為1,可向前向后移動(dòng);鎖定類型為3,可批量更新多條記錄。
根據(jù)上述方法做基本上不再會(huì)有問(wèn)題,但為保險(xiǎn),根據(jù)RecordSet分頁(yè)的原理是根據(jù)讀取所有記錄后獲取記錄數(shù),所以先讓游標(biāo)滾動(dòng)一圈,在級(jí)rs.pagesize=10 后面加上以下兩句:
rs.movelast '游標(biāo)移至最后
rs.movefirst '游標(biāo)移到最前
已知RecordSet的分頁(yè)原理為先把整個(gè)數(shù)據(jù)庫(kù)里面的記錄讀出后才能獲取rs.Recordcount(記錄總數(shù))的值。這種分頁(yè)方法比較簡(jiǎn)單,但是有一個(gè)致命的壞處,當(dāng)數(shù)據(jù)庫(kù)里記錄數(shù)有很多條時(shí),根據(jù)其分頁(yè)原理,這樣就會(huì)占用很高的系統(tǒng)資源,非常浪費(fèi),建議在實(shí)際編程中不使用該方法�,F(xiàn)在給大家一個(gè)思路,可以在SQL查詢語(yǔ)句里做分頁(yè)處理,每次讀取固定的記錄數(shù),具體如下:
從數(shù)據(jù)庫(kù)表中的第M條記錄開(kāi)始取N條記錄,利用Top關(guān)鍵字:注意如果Select語(yǔ)句中既有top,又有order by,則是從排序好的結(jié)果集中選擇:
SELECT *
FROM ( SELECT Top N *
FROM (SELECT Top (M + N - 1) * FROM 表名 Order by ID desc) t1 ) t2
Order by ID desc
用以上SQL語(yǔ)句進(jìn)行分頁(yè),錯(cuò)誤會(huì)比較少,最重要得是效率比較高。
分享:ASP實(shí)例教程:Form集合Form集合 注意因?yàn)楸続SP實(shí)例教程是關(guān)于表單的代碼,為了省事,所以我不截圖了!大家自行測(cè)試實(shí)例執(zhí)行結(jié)果! 一個(gè)Form集合的簡(jiǎn)單應(yīng)用 本例演示Form集合如何從表單取回值。此表單使用POST方法,這意味著發(fā)送的信息對(duì)用戶來(lái)說(shuō)是不可見(jiàn)的,并且對(duì)對(duì)所發(fā)送信息的
- asp FSO 讀寫文件本文件實(shí)現(xiàn)代碼
- asp中isNull、isEmpty和空字符串的區(qū)別
- asp獲取用戶真實(shí)IP地址的方法
- asp連接sqlserver數(shù)據(jù)庫(kù)實(shí)現(xiàn)代碼
- asp中正則表達(dá)式過(guò)濾html代碼函數(shù)
- asp中g(shù)et post提交表單區(qū)別
- 網(wǎng)頁(yè)模板:ASP內(nèi)建對(duì)象Request
- xmlhttp的open方法使用詳解
- ASP的常用的自定義函數(shù)大全
- asp中用for循環(huán)的一個(gè)小技巧
- eWebEditor v3.8 列目錄
- ASP無(wú)組件分頁(yè)實(shí)現(xiàn)思路及代碼
- 相關(guān)鏈接:
- 教程說(shuō)明:
ASP教程-解決ASP Recordset 分頁(yè)出現(xiàn)負(fù)數(shù)
。