首页 > 代码库 > 【ASP】对数据库查询的内容分页显示算法的改进
【ASP】对数据库查询的内容分页显示算法的改进
上次写的《【ASP】数据库查询的内容分页显示》(点击打开链接)中的实现算法虽然能够在一个特定的表中实现了预想的效果,
但是这一算法移植到其他系统之后,发现通用性不强
首先此分页算法的具体实施是通过数据库后台的ID号的区分每一页的,
在一些表中,如果查询出来的ID结果是乱序的,此算法则会失效。
同时,翻页的链接是写死的,没有实现宏,来确定此页的名称。
所以,必须通过大量的修改,实现此算法,但是根本的思想还是没变的,也算是【ASP】数据库查询的内容分页显示v2吧!
一、基本思想
1.页面的名称可以通过程序取到,那么此页面放到任意一个位置,被修改成任意的文件名,算法也不会失效。
2.还是设定好的upper与lower,total,pages,但计算方式有所改变。
3.具体是每一页都查询全表记录,然后,在前台判定那个范围是应该算出的。
二、制作过程
所实现的功能与《【ASP】数据库查询的内容分页显示》(点击打开链接)是没有区别的
但是,整体代码变化更变了不少。具体请看每一行的注释。
<!--asp页面必须要有此句,否则页面乱码--><%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><!--页面使用utf-8否则容易乱码--><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>翻页</title></head><!--取到本页的文件名,为后面翻页的超级链接所使用--><%pagename=Mid(Request.ServerVariables("SCRIPT_NAME"),InStrRev(Request.ServerVariables("SCRIPT_NAME"),"/")+1)%><body><h1>名单:</h1><!--如果首次进入此页面,则默认id与per为0与1--><%id=Request.QueryString("id")if id="" thenid=0end if%><%per=Request.QueryString("per")if per="" thenper=1end if%><!--lower与upper的计算方式改变了。主要是输出判断从后台数据库改变为前台。--><!--每一页,后台数据库都把整张表送过来,但只输出一部分--><%lower=0upper=0lower=cint(id)*cint(per)upper=cint(id)*cint(per)+cint(per)-1%><%db="../Database.mdb"Set conn = Server.CreateObject("ADODB.Connection")conn.Open "driver={Microsoft Access Driver (*.mdb)};pwd=admin;dbq=" & Server.MapPath(db) %><!--这里的pages计算方式,根据总记录数total除以每页显示条数per,并取上限得出,--><!--由于asp没有取上限函数,所以只能加0.999999……这一无限不循环小数取整数部分得出--><!--查询每页的数目应该用另一个查询变量rs2,区分查全表变量rs--><%Set rs2 = Server.CreateObject( "ADODB.Recordset" )sql = "select count(*) as total from test;"rs2.open sql,conn,1,3total=rs2("total")pages=int(cint(total)/cint(per)+0.9)%><!--基于上限的计算方式,如果最后一条记录应该是少于总数加上每页显示数目。--><%if cint(upper)<cint(total)+cint(per) and cint(id)>-1 then%><%Set rs = Server.CreateObject( "ADODB.Recordset" )sql = "select * from test;"rs.open sql,conn,1,3%><%if (rs.bof and rs.eof) then%>暂无<!--asp中初始化变量i的默认值为0--><!--如果i在上限与下限之外就不做任何事,否则输出--><%elsedo while not rs.eofif cint(i)<cint(lower) or cint(i)>cint(upper) thenelse%><table> <tr> <td><%=rs("id")%></a></td> <td><%=rs("username")%></td> <td><%=rs("password")%></td> </tr></table><%end ifi=i+1rs.movenextloop%><!--计算好upper,lower,page,之后就没有太多的改动了。-->第<select id="page"><%t=0do while cint(t)<cint(pages)%><%if (cint(t)=cint(id)) then%><option value="<%=t+1%>" selected="selected"><%=t+1%></option><%else%><option value="<%=t+1%>"><%=t+1%></option><%end if%><%t=t+1loop%></select>/<%=cint(pages)%>页<input type="button" onclick="gopage()" value="转到该页"/>每页显示<a href="<%=pagename%>?id=<%=(id)%>&per=1">1</a>|<a href="<%=pagename%>?id=<%=(id)%>&per=2">2</a>|<a href="<%=pagename%>?id=<%=(id)%>&per=3">3</a>条记录<a href="<%=pagename%>?id=<%=(id-1)%>&per=<%=(per)%>">上一页</a><a href="<%=pagename%>?id=<%=(id+1)%>&per=<%=(per)%>">下一页</a><%end if%><%rs.closeset rs=nothing%><%else%>暂无 <a href="javascript:history.go(-1)">返回</a><%end if%><%rs2.closeset rs2=nothingconn.closeset conn=nothing%></body></html><script>function gopage() {var id=document.getElementById("page").value-1;window.location.href = "<%=pagename%>?id="+id+"&per=<%=(per)%>";} </script>
【ASP】对数据库查询的内容分页显示算法的改进
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。