Ghost全自动系统备份光盘正式版 V4.5 | 硬盘版 V2.0 | 排行榜 TOP50 | 图文推荐 | 玩小游戏
首页 >> Asp编程 >> Asp经验技巧 >> 关于asp分页的新想法

关于asp分页的新想法

作者:rainoxu 来源:小鹤与独角兽 时间:2008-9-6 网友评论条 【

最近在做学院的选课系统时,在分页上被卡壳了一下,因为需要用到排序,所以不能像以前一样用一个自动递增的字段作为主键,然后仅仅是对这个主键来做统计和操作,我原来写的分页——也就是现在我博客上用到的分页程序,思路是这样的:

  1. 通过日志ID(这个是自动递增字段,故是唯一的)先统计出日志数
  2. 获取指定页数,然后和每页记录数相乘得到需要从第几条记录之后开始读取
  3. 读取这个上面这个ID记录集的top 1记录,然后保存到变量startPosition中
  4. 从startPosition开始读取指定数量的记录完成分页

但是这里一直用到的是日志的ID,现在想了一下,学院的系统,可以这样来分页:

  1. 先依旧是统计ID(自己可以建一个,自动递增),统计出全部记录总数,同时把所有的ID记录返回(这一步相对比较耗资源),注意,只是返回一个字段的所有记录,不是整个表的所有记录

    dim rs,sql
    set rs=createobject("adodb.recordset")
    sql="select id from [table] where 你的查询限制条件"
    rs.open sql,conn,1,1

  2. 获取指定页数减一,乘以每页显示的记录数

    dim cPage,pageSize,position
    pageSize=15
    cPage=cint(request.querystring("cpage"))
    if cPage="" then cPage=1 end if
    if cPage=1 then
          postion=1
    else
          position=cPage*pageSize
    end if

  3. 然后用rs.moveto这个函数来定位rs游标到刚才得到的ID记录集的某个位置,然后顺序读取N条ID记录,放在一个数组中

    dim i,idTemp
    idTemp=""
    rs.moveto(position)
    for i=1 to pageSize
          '构建一个以逗号为分隔的字符串
          idTemp=idTemp&rs("id")&","
          rs.movenext
    next
    '去掉最右边的一个无用的逗号
    idTemp=left(len(idTemp)-1)
    rs.close

  4. 然后读取存在数组中ID相符的全部记录

    sql="select * from [table] where id in ("&idTemp&")"
    rs.open sql,conn,0,1

站长工具
ALEXA世界排名查询:
相关文章
loading 请稍等,评论加载中...

Aspxhome.com. 中国Asp之家. 版权所有

闽ICP备06017341号