【ASP】数据库查询的内容分页显示

对于大数据的查询,你不可以一次性地把所有数据中显示出来,

比如一张学生表上面有一百多号人,

那么在页面中就应该一次显示10人左右,

提供翻页功能给用户进行翻阅,不要一次性显示100多号人。

翻页系统是网页中很常见的功能


一、基本目标

首先还是在Access2007数据库有一张有8条数据的用户信息表,


在页面做分页显示,

翻到最后一页,翻到最前一页,提示暂无记录,给一个超级链接让用户返回


每一页用户可以自定义显示1条、2条、3条记录,如果做100条记录的翻页,可以设置成每页显示10条、15条、20条记录

定义显示不同记录的时候,页数的多少会随之改变


翻页时,下拉菜单会提示翻到哪一页,用户可以自定义翻到哪一页,



二、制作过程

整个系统就一个页面page.asp,翻页与显示记录的多少是通过id与per来控制的。

页面参数由于id与per并不是什么涉及安全性的或者大数据的变量,故使用get方法传递

整个页面的代码如下,每一段都有注释的,请看注释即可:

<!--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>

<body>
<h1>名单:</h1>
<!--拿走穿过来的id变量与per变量,如果拿不到,那么用户必定是第一次进入这个页面了,默认id为1,从数据库的第一条记录开始,per为1,一条记录-->
<!--注意asp中判断变量是否为空的方法-->
<%
id=Request.QueryString("id")
if id="" then
id=0
end if
%>

<%
per=Request.QueryString("per")
if per="" then
per=1
end if
%>
<!--lower与upper必须定义,asp不支持即时运算的算术表达式,此两个变量时同个数学的方法确定查询test中id的范围-->
<!--asp由于变量是没有类型的,变量间数字间的运算必须使用cint来声明此乃数字运算,否则默认是字符串的连接运算-->
<%
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) 
%>
<!--此页仅查询lower-upper的id,由于id在数据库中数字类型,lower也是数字,所以要用 & 连接,而不是 + 连接,那是用来连接字符串的。-->
<%
Set rs = Server.CreateObject( "ADODB.Recordset" )
sql = "select * from test where id>"&lower&" and id<"&upper&";"
rs.open sql,conn,1,3
%>
<!--如果没有查到东西-->
<%
if (rs.bof and rs.eof) then
%>
<!--如果id少于0你肯定是翻到第1页之前了-->
<%
if (id<0) then
%>
暂无
<!--给一个浏览器的“后退”链接用户,那就不用考虑id的运算问题了,因为用户翻到这一页使用后退能解决很多问题-->
<a href="javascript:history.go(-1)">下一页</a>
<!--否则就是翻到最后一页之后了,至于最后一页的ID是多少,要确定是很麻烦的,一个否则就完成-->
<%
else
%>
暂无
<a href="javascript:history.go(-1)">上一页</a>
<%
end if
%>
<!--如果查到东西,那么就显示出来了,那些跳转到第几页、翻页的东西也包含在此else中,必须查到东西才允许用户翻页、定义第几页的动作,以保证上面的后退按钮发挥作用-->
<%
else
do while not rs.eof
%>
<table>
  <tr>
    <td><%=rs("id")%></a></td>
    <td><%=rs("username")%></td>
    <td><%=rs("password")%></td>
  </tr>
</table>
<%
rs.movenext
loop
%>
<!--这里是确定如果每页以per条记录来显示,total是test表中记录条数,pages求出来之后,一定加一个cint对其整型化,不同于其他编程语言,默认为float型,显示为2.666667-->
<%
Set rs = Server.CreateObject( "ADODB.Recordset" )
sql = "select count(*) as total from test;"
rs.open sql,conn,1,3
total=rs("total")
pages=cint(total)/cint(per)
%>
<!--这里是构造翻页的下拉菜单,注意asp的循环写法,没有t++的自增运算,只能t=t+1-->
第
<select id="page">
<%
t=0
do while cint(t)<cint(pages)
%>
<!--cint(t)=cint(id)是确定当前翻到第几页,然后下拉查菜单的默认值便是当前页的页数-->
<%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
%>
<!--可以不使用respond.write来输出,使用< % = >来输出-->
</select>/<%=cint(pages)%>
页
<!--跳转页的按钮需要使用到javascript来翻页,见最下面的脚本-->
<input type="button" οnclick="gopage()" value="转到该页"/>

<!--每页显示的内容多少改变per的多少即可,翻页改变id值即可。-->
每页显示<a href="page.asp?id=<%=(id)%>&per=1">1</a>|<a href="page.asp?id=<%=(id)%>&per=2">2</a>|<a href="page.asp?id=<%=(id)%>&per=3">3</a>条记录
<a href="page.asp?id=<%=(id-1)%>&per=<%=(per)%>">上一页</a>
<a href="page.asp?id=<%=(id+1)%>&per=<%=(per)%>">下一页</a>
<%
end if
%>
<!--查完记得关闭数据库……-->
<%
rs.close
set rs=nothing
conn.close
set conn=nothing
%>

</body>
</html>

<script>
function gopage() {
	/*拿到现在下拉菜单所选择的值,再跳转*/ 
var id=document.getElementById("page").value-1;
window.location.href = "page.asp?id="+id+"&per=<%=(per)%>";
} 
</script>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值