当前位置: 首页 > 图文教程 > 网络编程 > ASP > 关于ASP Recordset 分页出现负数解决方法及建议

ASP
IIS访问ASP页面时报错The requested resource is in use.的解决办法
错误类型:Provider (0x80004005)未指定的错误 的一个处理方法
关于asp+access的安全问题分析
把RS.GetRows看得更清楚
asp下UTF-8页面乱码的解决方法
解决使用良精企业建站7.0未注册问题
在ASP中连接MySQL数据库的方法,最好的通过ODBC方法
flash与js通讯方法
ASP操作Excel相关技术总结
解决用Access数据库建站维护不便的问题的方法
ASP实现GB2312字符与区位码的相互转换的代码
对于ASP编码问题的深入研究与最终解决方案
ASP生成UTF-8编码的代码
删除A表中在B表中不存在的数据
动网防恶意广告比较有效的办法附asp代码
asp磁盘缓存技术使用的代码
网页语言编码及asp乱码问题解决方案
FSO遍历目录实现全站插马的代码
关于无限分级(ASP+数据库+JS)的实现代码
如何写ASP入库小偷程序

关于ASP Recordset 分页出现负数解决方法及建议


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 187 ::
收藏到网摘: n/a

对于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语句进行分页,错误会比较少,最重要得是效率比较高。