利用ASP实现对表的分页浏览(下)
程序员文章站
2022-12-06 20:40:56
一.关于参数传递。假如表中有46条记录,然后我们在地址栏中敲入http.//localhost/display.?line=10&page=2(假设这是正确的路径)肯定将给我们显示第二页的十...
一.关于参数传递。假如表中有46条记录,然后我们在地址栏中敲入http.//localhost/display.?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条记录,而我们要它以每页显示二十条,第四页的二十条记录,也就是第六十一条到第八十条记录。显然会出错。同样情况还会出现在导航条中,如果当前浏览器中显示的是以每页十条,第四页的内容,我们去设定它以每页二十条显示,同样也会出错。解决方法还是一样的,先判断一下参数的合理性,然后再设置显示方式。将“按用户要求设定好显示方式”部分用以下代码代替。
<%
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
<%
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条记录,而我们要它以每页显示二十条,第四页的二十条记录,也就是第六十一条到第八十条记录。显然会出错。同样情况还会出现在导航条中,如果当前浏览器中显示的是以每页十条,第四页的内容,我们去设定它以每页二十条显示,同样也会出错。解决方法还是一样的,先判断一下参数的合理性,然后再设置显示方式。将“按用户要求设定好显示方式”部分用以下代码代替。
<%
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
上一篇: 初探SSI网页制作