动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > ASP技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ ASP技巧 ]的信息

本月文章推荐
.优化MICROSOFT ACCESS提高速度.
.迁移到 ASP .NET:需考虑的重要问.
.asp实现在web中显示电子表格数据.
.用ASP实现IE地址栏参数的判断.
.悠哉悠哉,一个复合查询方法.
.DateDiff的用法.
.如何在主页中控制浏览权限.
.用ASP编程实现快速查找.
.避免asp的SQL的执行效率低.
.如何用ASP生成XML数据文档(RSS订.
.如何编写通用的ASP防SQL注入攻击.
.一个简单的用存储过程分页.
.ASP中从数据库读取二进制文件数据.
.ASP技术在论坛中的运用(三)(吐血.
.净化网络环境 ASP程序实现过滤脏.
.通过ASP远程注册自己的组件.
.分解质因数(asp 分布递归法).
.ASP中五种连接数据库的方法.
.查看服务器Application/Session变.
.ASP中实现的类似URLEncode的编码.

数据分页方法新思路,速度非常快!

发表日期:2004-11-5 |


这篇文章要达到的目的就是,实现大数据分页浏览并最优化速度。

    建立一个web 应用,分页浏览功能必不可少;这个问题也是长久以来最普遍的问题,目前也得到了较好的解决,其中象ASP 程序的分页算法有很多,比如使用ado 对象的PageSize 这些属性,按记录总数计算页,然后跳转记录集再输出;也有编写存储过程实现分页数据,这些方面各有优缺点,以下本人介绍一种应用实际项目中速度非常快的分页算法;

关键点:SQL (用TOP 和 自动编号 实现)
        页面脚本 (浏览器回退功能)

环境:
  IIS/SQL Server/Access
表结构:
create table 内容表 (
 自动编号 IDENTITY(int, 1,1) not null,
 分类编码 <I>var</I>char(20) null,
 标题 <I>var</I>char(255) NULL,
 内容 <I>var</I>char(4000) null,
 时间 datetime null,
)

实现原理:
  这个表设定了自动编号字段,这个字段的特性就是生成不重复的整形,包括删除了记录后该字段仍然保持‘流水性’(注:通常在系统表建设中,这种字段的运用很少,因为编号不能自由管理,但在这里使用它,主要是想在文章中省略编号维护的代码)。

分页:
  那么第一步,就是查询一个页的数据;如果有100笔记录,按20记录一页,那么通常的分页算法就是“页总数=总记录 除 分页的控制数 [有余数的话,页总数加一]”,这样的做法就导致必须产生所有记录的一个大记录集;从而,又有人提出了用存储过程的分页算法,前者是asp 脚本产生大记录集,这样速度相当慢,后者是杀鸡用牛刀,虽然我经常写存储过程,但根据我的思路会发现写存储过程完全多余。
  
  在SQL 中,许多刚接触它的朋友都知道 Top 修饰关键字的作用;例如:select TOP 1 * from table1 --这样就实现从Table1表返回只有一条记录的记录集那么分页优化的最终目的就是避免产生过大的记录集,通过TOP 即可完全控制;现在查询表应该是 select Top 20 自动编号,标题,内容,时间 from 内容表。
  
  但现在还有个问题,就是如何定位,Top 不可能自动给我们定位输出某个页,这就设计到了where 从句,根据一个特定条件输出正确的内容;注意:记录的 order by 排序是非常重要的,这个决定了这个算法的成败;
  
这里的演示是DESC 方式,倒序排列,比如网站的软件更新,就是最近的更新放最前面,而这个就是倒序方式。

OK,下面来看看实际代码,首先要确定是否为起始页。


    dim strSQL,i,endID,isBeginPage
    const Cnt_PageSize = 20      '定义每页记录的大小
    '通过检查浏览器传递的Page 参数的值来判断是否为进入下一页的操作
    isBeginPage = isEmpty(request("Page")) or request("Page")="" or request("Page")<>"next" 
    '这里是分页的核心
    if isBeginPage then '如果是起始页
     '查询=列出分类编码等于参数flbm 的记录,按倒序排列,并只列出前 Cnt_PageSize 笔 (Cnt_PageSize是常量定义,比如20)
      strSQL = "select TOP " & Cnt_pageSize & " 自动编号,标题,内容,时间 from 内容表 where 分类编码= '" & TRIM(SQLEncode(request("flbm"))) & "' order by 自动编号 desc"
    else '如果不是起始页
      if request("Page")="next" then '这里这样写是为了加强代码的表现,如果参数为next ,则表示取下页内容
       '查询=列出分类编码等于参数flbm的记录并且要小于自动编号endID (endID也是参数),并倒序排列,并只列出前 Cnt_PageSize 笔 (Cnt_PageSize是常量定义,比如20)
        strSQL = "select TOP " & Cnt_pageSize & " 自动编号,标题,内容,时间 from 内容表 where 分类编码= '" & TRIM(SQLEncode(request("flbm"))) & "' and 自动编号<" & request("endID") & " order by 自动编号 desc"
      End if
    end if

    '打开数据连接执行SQL 并建立记录集
    set rs = Cnn.Execute(strSQL)
    if not rs.Eof then '这里写入判断是否为Eof 可以不要,但是,在这里却有它的特殊意义
      call TableTitle '这里是自写的函数,用于建立表格标记
        call beginTr '这里是建立表格tr标记

        for i=0 to rs.fields.Count-1 '遍历记录集字段
          call AddCol(rs(i).name) '输出字段名
        Next
        
        call endTr      

        while not rs.eof      '循环记录集内容,并输出
          call beginTr

          for i=0 to rs.fields.Count-1
            call AddRow(ASPEncode(rs(i).value))
          Next
          call endTr
          endID = rs("自动编号")      '这里保存每次输出的自动编号值
          rs.MoveNext
        Wend
      call TableBottom     '到此为止,就简单的将记录集内容全部输出
      '这里输出翻页标记,vbaIIF 是自写函数
       原型为 <I>function</I> vbaIIF(a,b,c)
                if a then
                  vbaIIF =b
                else
                  vbaIIF =c
                end if
              end <I>function</I>
      
       上一页的实现是通过脚本调用浏览器的功能 history.back(1) 实现,那么回页时并不需要在服务器端重新生成数据,速度不用考虑了。
       在首页的时候,上一页的链接应该是无效的,通过 vbaIIF(isBeginPage,"disabled","") 实现,如果为首页,那么在标记中加入 disabled 属性 ,如果不是首页,则加入history.back(1); 脚本指令,用于回退浏览页。
       下一页是传递Page 参数和endID参数,Page 设置为 next 表示为下一页的动作,endID 表示当前记录集的末尾编号,下页将由此分页。
       
      response.Write("〈a href=""#"" onclick=""java<I>script</I>:" & vbaIIF(isBeginPage,"","history.back(1);") & """ " & vbaIIF(isBeginPage," disabled ","") & "〉上一页〈/a〉|〈a href=""TypeOptions.asp?flbm=" & request("flbm") & "&Page=next&endID=" & endID & """〉下一页〈/a〉")
    else
     '这里通过判断记录集是否为空来解决到末尾页还可以继续翻页的问题
      if not isBeginPage then
       '判断是否为空记录,并且不是起始页,那么生成回退页面的脚本,效果就是进入该页后将自动返回到上页。       
        response.Write "〈<I>script</I> language=java<I>script</I>〉" & vbCrlf
        Response.Write "history.back(1);" & vbCrlf
        Response.Write "〈/<I>script</I>〉"
        Response.End
      else '如果是起始页记录就为空,则提示无内容
        Response.Write "〈font color=blue〉该类别下无内容〈/font〉"
      end if
    end If


总结:通过前台脚本,SQL查询技巧,实现高性能的分页程序简单快速

希望同行提出更优秀实时数据分页算法

备注:由于论坛限制了HTML字符,所以关键符号采用了中文大写。

上一篇:在Form域中Post大于100K的数据 人气:9161
下一篇:ASP程序中同一个用户不允许同时登陆两次 人气:12606
浏览全部数据分页的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-9-6 Movie34电影搜索引擎 v3.0
2008-9-6 wap2.0仿帝国建站喜用 v2.0
2008-9-6 免费人才招聘网 宽屏版 v3.01
2008-9-6 喜喔喔视频采集程序 v1.0 beta
2008-9-6 ASP客户管理系统
2008-9-6 主流驿站中秋祝福程序
2008-9-6 php实现msn协议的类
2008-9-5 Coppermine Photo Gallery v1.4.
2008-9-5 清松网络日记本 v2.4
2008-9-7 MobileFotos照片分享工具1.2破解
2008-9-7 Morse-it莫尔斯电码发射器1.0破解
2008-9-7 vlc4iphone流媒体播放器0.9.9破解
2008-9-7 iLog通讯记录管理 v2.0.0破解版
2008-9-7 Snapture多功能相机 v2.0破解版
2008-9-7 MindWrap幻视1.1破解版
2008-9-7 LonelyPlanet日语手册1.1破解版
2008-9-7 MyWeather天气预报1.0.2破解版
2008-9-7 iSilo电子书阅读工具 v1.0简繁汉
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | Html转换js | js/vbs加密 | md5加密 | 进制转换
实用工具:汉字翻译拼音 | 符号对照表 | 个税计算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵