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

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

时间: 2024-11-08 17:41:47

ASP Recordset 分页出现负数解决方法及建议的相关文章

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

对于Recordset分页时出现负数的现象,相信会有很多人遇到过这个问题,有时百度.GOOGLE也不得其解,现在由我来总结一下. 出现负数,主要和游标类型有关系.(为举例方便,假设已经有一个conn.asp链接数据库的文件并且已经include)现在举一个例子,代码如下: 对于Recordset分页时出现负数的现象,相信会有很多人遇到过这个问题,有时百度.GOOGLE也不得其解,现在由我来总结一下. 出现负数,主要和游标类型有关系.(为举例方便,假设已经有一个conn.asp链接数据库的文件并且

ASP Recordset分页出现负数的解决方法

对于Recordset分页时出现负数的现象,相信会有很多人遇到过这个问题,有 时百度.GOOGLE也不得其解,现在由我来总结一下. 出现负数,主要和游标类型有关系.(为举例方便,假设已经有一个conn.asp 链接数据库的文件并且已经include)现在举一个例子,代码如下: '======================================================= sql="Select * from 表名 where 条件 order by ID desc"

ASP Recordset 分页显示数据的方法(修正版)_ASP基础

1.建立Recordset对象 复制代码 代码如下: Dim objMyRst Set objMyRst=Server.CreateObject("ADODB.Recordset") objMyRst.CursorLocation=adUseClientBatch '客户端可批量处理 objMyRst.CursorType=adOpenStatic'光标类型为静态类型 注意:Recordset对象不能用Set objMyRst=Connection.Excute strSQL的语句建立

thinkPHP使用post方式查询时分页失效的解决方法_php实例

本文实例讲述了thinkPHP使用post方式查询时分页失效的解决方法.分享给大家供大家参考,具体如下: 昨天晚上一直没有解决的php项目中的bug,就在刚才终于搞定,在这里还需要感谢各位大神给的帮助! 具体问题描述 最近遇到一个非常棘手的问题,也是因为刚入手thinkphp.在做项目的过程中,因为需要非常多的查询条件,如果以get方式提交表单的话,会因为url长度限制而报错,所以必须使用post方式提交表单数据,但是在分页的过程中,遇到了问题,因为thinkphp自带的分页是以a标签的形式,进

ASP 提示非法赋值的解决方法_应用技巧

分析可能是: asp的一些保留字段导致,具体的大家可以参考这篇文章:ASP常见的保留字整理 正常来说 代码没问题```ID也有值 但是库改成了SQL SERVER库 因不长用所以请教各位这个错误是哪里问题 Microsoft VBScript 运行时错误 错误 '800a01f5' 非法赋值: 'SqlStr' /admin/list/savedate.asp,行60 错误行代码  SQLstr="delete d_31 where id="&id&"&quo

ASP 提示非法赋值的解决方法

分析可能是: asp的一些保留字段导致,具体的大家可以参考这篇文章:ASP常见的保留字整理 正常来说 代码没问题```ID也有值 但是库改成了SQL SERVER库 因不长用所以请教各位这个错误是哪里问题 Microsoft VBScript 运行时错误 错误 '800a01f5' 非法赋值: 'SqlStr' /admin/list/savedate.asp,行60 错误行代码  SQLstr="delete d_31 where id="&id&"&quo

ASP无法更新ACCESS数据库解决方法

access|解决|数据|数据库 写在前面: 都是XP惹的祸.个人认为XP过度的追求安全性,而以具体功能无法实现作为代偿.下面来看看这个ASP例子,相信经常接触ASP的人会时常碰到这个问题:明明自己的代码写的非常正确,为什么就是不能正常更新呢?以下几个错误信息不是因为ASP本身的代码错误导致的,而是一些权限的设置问题.开始我碰到这个问题的时候,曾经自习检查自己代码不下10遍,就是没检查出ASP的错误来.最后上网查了查才发现是万恶的权限作祟. 运行环境:windows xp IIS 5.0 ---

ASP脚本运行超时的解决方法

最近在学习服务器知识.有时候遇到asp脚本运行超时的错误,真是麻烦.找了相关资料,其中有一些解决方法. IIS默认的脚本超时时间是90秒 这样的话如果你是上传软件或者传送数据大于90秒的时候就会产生进程脚本超时放弃你的执行,保护服务器的处理大容量数据内存以及CPU占用过大导致死机或者不稳定的情况 处理办法是 一种:你可以在IIS所在网站的属性里点击"主目录"然后"配置""选项"里ASP/cGI脚本超时 大小设置高一些 另一种方法更简单:直接在程序

IIS 运行ASP文件500内部错误解决方法大全_win服务器

1 IIS服务器出现500错误   2错误原因:500错误的原因一般是源程序出现错误造成的. 3 解决办法:1 首先设置IE浏览器à工具->Internet选项   2 刷新或者重新打开500错误页面就会出现错误的程序部分   3 根据错误提示,然后解决问题.     4 ADODB.Connection 创建失败的可能解决方法: 1.重装MDAC2.8. MDAC 2.8下载地址: http://www.microsoft.com/downloads/details.aspx?displayl