上次写的《【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="" then id=0 end if %> <% per=Request.QueryString("per") if per="" then per=1 end if %> <!--lower与upper的计算方式改变了。主要是输出判断从后台数据库改变为前台。--> <!--每一页,后台数据库都把整张表送过来,但只输出一部分--> <% lower=0 upper=0 lower=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,3 total=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在上限与下限之外就不做任何事,否则输出--> <% else do while not rs.eof if cint(i)<cint(lower) or cint(i)>cint(upper) then else %> <table> <tr> <td><%=rs("id")%></a></td> <td><%=rs("username")%></td> <td><%=rs("password")%></td> </tr> </table> <% end if i=i+1 rs.movenext loop %> <!--计算好upper,lower,page,之后就没有太多的改动了。--> 第 <select id="page"> <% t=0 do 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+1 loop %> </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.close set rs=nothing %> <% else %> 暂无 <a href="javascript:history.go(-1)">返回</a> <% end if %> <% rs2.close set rs2=nothing conn.close set conn=nothing %> </body> </html> <script> function gopage() { var id=document.getElementById("page").value-1; window.location.href = "<%=pagename%>?id="+id+"&per=<%=(per)%>"; } </script>
原文地址:http://blog.csdn.net/yongh701/article/details/41204053