ASP Recordset 分頁出現負數解決方案及建議

來源:互聯網
上載者:User
對於Recordset分頁時出現負數的現象,相信會有很多人遇到過這個問題,有時百度、GOOGLE也不得其解,現在由我來總結一下。

出現負數,主要和遊標類型有關係。(為舉例方便,假設已經有一個conn.asp連結資料庫的檔案並且已經include)現在舉一個例子,代碼如下:

'=======================================================
          sql="Select * from 表名 where 條件 order by ID desc"    '這裡的order by 條件可根據自己需要改寫
          Set rs=conn.execute(sql)      '===注意一下這一句===
          rs.pagesize=10      '===設定每頁的記錄數為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
              '輸出內容
         c=c+1
         rs.movenext
         Loop
         '做頁面的連結
'=======================================================

根據上面的代碼,RecordSet對象直接由代碼:Set rs=conn.execute(sql),使用該句後,RecordSet對象預設的遊標為0,即遊標只能向前滾動,鎖定類型為0,表示唯讀鎖定,不能更新RecordSet對象。

所以,對於分頁時如果出現負數,則檢查RecordSet對象是否寫為以上形式,要寫成:
Set rs=Server.CreateObject("adodb.recordset")
rs.open sql,conn,1,3
以上表示遊標為1,可向前向後移動;鎖定類型為3,可批次更新多條記錄。

根據上述方法做基本上不再會有問題,但為保險,根據RecordSet分頁的原理是根據讀取所有記錄後擷取記錄數,所以先讓遊標滾動一圈,在級rs.pagesize=10  後面加上以下兩句:
rs.movelast   '遊標移至最後
rs.movefirst  '遊標移到最前

已知RecordSet的分頁原理為先把整個資料庫裡面的記錄讀出後才能擷取rs.Recordcount(記錄總數)的值。這種分頁方法比較簡單,但是有一個致命的壞處,當資料庫裡記錄數有很多條時,根據其分頁原理,這樣就會佔用很高的系統資源,非常浪費,建議在實際編程中不使用該方法。現在給大家一個思路,可以在SQL查詢語句裡做分頁處理,每次讀取固定的記錄數,具體如下:

從資料庫表中的第M條記錄開始取N條記錄,利用Top關鍵字:注意如果Select語句中既有top,又有order by,則是從排序好的結果集中選擇:

SELECT * 
FROM ( SELECT Top N *
FROM (SELECT Top (M + N - 1) * FROM 表名 Order by ID desc) t1 ) t2
Order by ID desc

用以上SQL語句進行分頁,錯誤會比較少,最重要得是效率比較高。



聯繫我們

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

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

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.