• 注册
  • 关于作者
    企业认证:趣记站长
    关注 6 粉丝 4 喜欢 9 内容 992
    江西省·南昌市
    聊天 送礼
    • 查看作者
    • 运用ASP完成对表的分页浏览

        大家都知道,ASP有着强大的数据库支配才能,这与她能随意马虎的调用ActiveX对象是密不可分的。下面我给大家引见一种ASP运用ADO对象完成对数据库记载分页展现的方法。以下代码均在WIN98+PWS+MSACCESS状态下经过历程。

        在这里我主要经过历程ADO对象鸠合的Recordset对象来完成各种数据库支配的。先引见几个用于分页展现的Recordset属性。

          PageSize:每页展现的记载数。

          PageCount:根据用户设好的PageSize和表中的总记载数,系统自动算出总页数。

          RecordCount:表中的总记载数。

          AbsolutePage:泄漏显示今后页码。如将AbsolutePage属性设为3,则今后记载移至第3页第1条(也就是第31条)。

        看到Recordset有了这几个属性后,相信大家也都认为做一个分页展现的递次是很简单的。下面讲一下思路,统统完成这一服从的代码都放在display.asp中,按执行的递次分别是:掀开数据库及表、读取用户要求的展现体式款式、设定好PageSize和AbsolutePage、将内容输出到浏览器、设定好导航条。以下是代码:

      <%'---------------------------掀开数据库及表

      set conn=server.createobject("ADODB.Connection")

      filepath=server.mappath("abc.mdb") '-------假定数据库文件是"abc.mdb"

      conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & filepath

      set rs=server.createobject("ADODB.Recordset")

      rs.open "main",conn,3,2 '-------假定表的名字是"main"

      %>

      <%'---------------------------读取用户要求的展现体式款式(经过历程参数转达)

      line=cint(request("line"))

      page=cint(request("page"))

      %>

      <%'---------------------------按用户要求设定好展现体式款式

      rs.PageSize=line

      rs.AbsolutePage=page

      %>

      <%'---------------------------展现内容%>

      <table width="100%" border="1">

      <tr>

      <%for i=0 to rs.Fields.Count-1%>

      <td><%=rs.Fields(i).name%></td>

      <%next%>

      </tr><%'-------以上部分展现表头,即字段名%>

      <%for i=1 to rs.PageSize%>

      <tr>

      <%for j=0 to rs.Fields.Count-1%>

      <td><%=rs.Fields(j).value%></td>

      <%next%>

      </tr>

      <%rs.movenext%>

      <%if rs.eof then exit for%>

      <%next%><%'-------以上部分展现表的内容%>

      </table>

      <%'---------------------------导航条%>

      <table width=100% ><tr>

      <td>

      <%if page<>1 then%>

      <a href=display.asp?page=1&line=<%=line%>>第一页</a>

      <%else%>第一页<%end if%>

      </td>

      <td>

      <%if page>1 then%>

      <a href=display.asp?page=<%=page-1%>&line=<%=line%>>前一页</a>

      <%else%>前一页<%end if%>

      </td>

      <td>

      <%if page<rs.PageCount then%>

      <a href=display.asp?page=<%=page+1%>&line=<%=line%>>下一页

      <%else%>下一页<%end if%>

      </td>

      <td>

      <%if page<>rs.PageCount then%>

      <a href=display.asp?page=<%=rs.PageCount%>&line=<%=line%>>最后一页</a>

      <%else%>最后一页<%end if%>

      </td><%'-------以上四项都需要举办揣摸:如果在第一页就不供给“第一页”和“前一页”的链接

      '-------如果在最后一页就不供给“最后一页”和“后一页”的链接%>

      <td>

      <form method="POST" action="display.asp?line=<%=line%>">

      请输入页码:<input type="text" name="page" size="3" value="<%=page%>">

      </form>

      </td>

      <td>

      <form method="POST" action="display.asp?page=<%=page%>">

      请设定每页<input type="text" name="line" size="3" value="<%=line%>">行

      </form>

      </td><%'-------因为两个表单都只需一个表单域,所以没有供给发送按钮,直接打回车就好了%>

      <td>

      第<%=page%>页/总<%=rs.PageCount%>页

      </td>

      </tr></table>

        这只是一个最基本的递次,没有举办优化措置责罚,也尚有一些bug,下面我们一同来使它更“美满”一些。

      一.关于参数转达。假如表中有46条记载,然后我们在地址栏中敲入http.//localhost/display.asp?line=10&page=2(假定这是正确的门路)肯定浏览器将给我们展现第二页的十条记载。但是如果在地址栏中只敲入http.//localhost/display.asp,浏览器却给我们一个出错信息。如何处置惩罚呢?我们必须在读取这些参数时加一个揣摸,如果参数是空的,就赋给它一个初值,以防出错。将“读取用户要求的展现体式款式”部分用以下代码替换:

      <%

      if request("page")<>"" then

      page=cint(request("page"))

      else

      page=1 '-------如果参数page为空,就给它赋值1

      end if

      if request("line")<>"" then

      line=cint(request("line"))

      else

      line=10 '-------如果参数line为空,就给它赋值10

      end if

      %>

        二.参数的合理性问题。如果我们在地址栏中敲入http.//localhost/display.asp?line=20&page=4会出现甚么状态呢?浏览器报错。因为表中只需46条记载,而我们要它以每页展现二十条,第四页的二十条记载,

      ASP写的判断Money各个位值的函数
      ASP错误处理,ASP网站防范黑客技巧,巧用ASP技术保护DHTML源代码,用ASP取出HTML里面的图片地址的函数,ASP实现网页打开任何类型文件都保存,ASP木马Webshell安全解决办案,几招让你的网站免受采集之苦,ASP使用MYSQL数据库全攻略,Ad Rotator 组件参考,在Asp中使用存储过程数值类型值,asp防止同时登陆的问题,使用ASP重启服务器,在ASP程序中实现数据库事务控制,深入理解ASP中FSO的神奇功能,Asp中一些FSO方面的函数,用ASP编程实现网络内容快速查找,ASP实现文件直接下载,Adodb.Stream 组件的使用说明,全国省市县无刷新多级关联菜单,ASP上两个防止SQL注入式攻击Function
      ASP

      也就是第六十一条到第八十条记载。显然会出错。一样状态还会出如今导航条中,如果今后浏览器中展现的是以每页十条,第四页的内容,我们去设定它以每页二十条展现,一样也会出错。处置惩罚方法还是一样的,先揣摸一下参数的合理性,然后再设置展现体式款式。将“按用户要求设定好展现体式款式”部分用以下代码替换。

      <%

      if page>(rs.RecordCount-1)\line+1 then

      '-------经过历程算计可知,最大页数=(总记载数-1)\每页行数+1

      response.write("error!") '-------如果参数不合实际,输出"error!"

      response.end '-------住手递次

      end if

      rs.PageSize=line

      rs.AbsolutePage=page

      %>

        三.考据表单域。导航条中的两个输入文本框输入的都必须是整数,否则也会出错。我们可以或许运用FrontPage的考据表单域服从开完成,这里就不多说了。

        四.优化。到目前为止,这个递次尚有一个缺点。在数据库的存取历程傍边,最花时间的要数是数据库的掀开和Recordset对象的直立,而这个递次每次执行都邑掀开数据库及直立Recordset对象,极大的降低了效能,一旦访问量增大,这个递次也就是去了价值。处置惩罚的设备是:第一次执行递次时,掀开数据库及直立Recordset对象,并将这些存在session中,下次执行时直接将session中的值返回就好了。用以下代码替换“掀开数据库及表”部分。

      <%

      if not isobject(session("conn")) then

      set conn=server.createobject("ADODB.Connection")

      filepath=server.mappath("abc.mdb")

      conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & filepath

      set rs=server.createobject("ADODB.Recordset")

      rs.open "main",conn,3,2

      set session("conn")=conn

      set session("rs")=rs

      else

      set conn=session("conn")

      set rs=session("rs")

      end if

      %>

         至此,一个对比“美满”的递次完成了。各位大虾有何高见?驱逐来信与我议论。webflier@263.net

      ASP写的判断Money各个位值的函数
      ASP错误处理,ASP网站防范黑客技巧,巧用ASP技术保护DHTML源代码,用ASP取出HTML里面的图片地址的函数,ASP实现网页打开任何类型文件都保存,ASP木马Webshell安全解决办案,几招让你的网站免受采集之苦,ASP使用MYSQL数据库全攻略,Ad Rotator 组件参考,在Asp中使用存储过程数值类型值,asp防止同时登陆的问题,使用ASP重启服务器,在ASP程序中实现数据库事务控制,深入理解ASP中FSO的神奇功能,Asp中一些FSO方面的函数,用ASP编程实现网络内容快速查找,ASP实现文件直接下载,Adodb.Stream 组件的使用说明,全国省市县无刷新多级关联菜单,ASP上两个防止SQL注入式攻击Function
      ASP

    • 0
    • 0
    • 0
    • 71
    • 单栏布局 侧栏位置: