请教:关于要传参数时的分页问题,麻烦各位高手帮我看一下,谢谢!

phuson 2004-11-23 07:39:29
看了前辈们的有关分页的帖子之后,小弟还有几个不明白的地方,请各位帮我解答,谢谢!

问题一:好象所有的分页方法分页时每浏览一页都要连接、断开数据库,这样服务器资源会不会很浪费?

其他问题在代码描述中:
由于我的是带有参数的查询结果分页,关于如何传参数至“下一页”费了我不少功夫,现我写了一个可以勉强符合要求的方案,各位帮我看看:(代码如下,为节省大家的宝贵时间,已略去次要部分)

文件a.htm内容:
<form action="a.asp" method="post">
<input type=text name=aa> '这是两个需要传递至a.asp的查询参数,实际有多个,为方便,以两个为例
<input type=text name=bb>
<input type=submit value="查询">
</form>

文件a.asp内容:
if request.servervariables("method")="POST" then '如果是从a.htm提交来的
aa=request.form("aa")
bb=request.form("bb")
sql="select * from tt where a='" & aa & "'and b='" & bb &"'"
session("sql")=sql '把生成的sql语句保存在session中,以供“下一页”时使用
else '如果是从“下一页”链接的a.asp?page=2,3,4……中提交的
sql=session("sql")
end if

'定义conn,rs等,略
page=request.querystring("page")
rs.absolutepage=page

<form action="" method=""> '问题二:这里的action,method好象定义与否都无关紧要?
<a href="a.asp?page=<%=page+1%>">下一页</a>
转到第<input type=text name=page>页 '问题三:这里的转到第几页的功能链接如何写?才能使page参数被以上代码page=request.querystring("page")接收?
</form>

问题四:我这样使用session的方法在效率、安全等等方面有没有什么问题?

问题五:我本来想在a.asp的form中加入一个hidden来保存生成的sql语句的,但这样一来这个hidden的value即sql值无法传递,因为下一页的链接"a.asp?page=2"并没有submit此表单,如何解决?
...全文
152 点赞 收藏 18
写回复
18 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
phuson 2004-12-10
谢谢,谢谢大家!
结帖了。
回复
dachangtui 2004-12-10
不客气.

如果数据库中有"id"这个属性,并且读取记录有时"id"有一定的规律,则可以通过"id"实现高效的分页,比如上面我给出的那种。
如果用"id"不行则:
用access数据库的网站访问量不会太大,分页上也只用"通用的,效率不太高"的分页方法。
用mssql等支持存储过程的数据库的网站,可以用存储过程实现高效的分页,如果你想学习存储过程,可以去sql版搜索"分页存储过程"。
回复
phuson 2004-12-09
谢谢 dachangtui(大长腿) 先生的精辟解答!

我还以为这个id是为了分页临时设置加上去的呢。

照你这么说,用id属性的方法适合的场合也太少了吧,,,那大部分情况下还得用“通用的、效率不太高”的分页方法?
回复
dachangtui 2004-12-09
to:phuson(stone)
"id"就是每一条记录的"记录编号",一般都设置为自动增加的那个。

之所以说那个分页方法不通用,是因为:如果记录没有"id"这个属性,就没办法用这个分页方法了。另外就算有"id"这个属性,也不一定可以用这种方法,比如:以"百度"为关键字搜索数据库,假设数据库里面有10万条数据符合,但这10万条数据中每条记录的"id"属性是不确定的,所以也没办法用这种方法分页。
但是用rs.pagesize那种方法,就可以分页,所以说rs.pagesize这种方法是通用的。

另外,用"效率最差的分页方法"没什么好惭愧的,呵呵,数据量很少的时候,执行效率不会差多少。
回复
phuson 2004-12-08
闹了半天,原来我在用的是效率最差的分页方法,惭愧啊:(

to:上一楼:
你这种方法看起来不难理解,可是语句中的id如何确定呢?你说的不通用具体是指什么?
回复
dachangtui 2004-12-08
to phuson(stone):
不是,你这种分页方式就是把10000条记录都装入内存,浪费服务器的资源,但是这种分页方法是通用的。

给你一个只读取一页记录的例子:
---------------------------------------------------------
N为每页显示的数 M为第几页
select top N * from tablename where id between (M-1)*N and M*N
---------------------------------------------------------

这种分页方法效率很高,但不通用,所以要想提高分页效率,只能具体问题具体分析。
回复
phuson 2004-12-07
谢谢 dachangtui(大长腿)!

我这样理解对不对:假如某一个sql语句:sql_str,直接检索出来的记录有10000条,服务器把全部装入内存;但是在分页中用了如下代码:
rs.pagesize=20
rs.open sql_str
rs.absolutepage=pagenum
之后,服务器只把第pagenum页的20条记录装入内存。----是不是这样的啊?
回复
comszsoft 2004-12-07
分页时候传递参数,我用过两种方法:
1。用session,我想这个不用多说了;
2。<a href="page.asp?page=<%=rs.absolutepage+1%>&sql=<%=server.urlencode(sql)%>">下一页</a>

大概就是这样了
回复
dachangtui 2004-12-07
第一个问题:分页当然会链接,断开数据库,这并不是造成服务器资源浪费的地方(用户对每"页"的请求是独立的,如果打开了数据库不关闭,才会浪费服务器资源)
造成服务器资源浪费的地方是:用户只需要一页的记录(比如20条),而服务器却要把10000条记录装入内存,再把这10000条记录分成500页,每页20条,最后把其中一页的记录返回给客户。这里服务器就多取出了9980条记录,造成了服务器资源的浪费.
所以最好的分页代码是:用户要哪些记录,服务器就取哪些记录.
回复
phuson 2004-12-05
第一个问题谁帮我回答一下,回答完就结帖了,谢谢!
回复
phuson 2004-11-25
我是楼主,难道第一个问题都没有人帮我回答吗?
回复
香椿炒鸡蛋 2004-11-24
为什么要用session呢 没必要把sql语句也放在session里面吧 嘿嘿
前面request一下传过来的值 ,分页的时候再传一下 <input type="hidden" value =... name=....>
回复
phuson 2004-11-24
楼上的,<a href="main_s2.asp?l_id=<%=l_id%>&page=<%=page+1%>">下一页</a>
这行代码里的main_s2.asp就是当前页吧,可是你并没有用request.querystring("l_id")来接收这个值啊?
回复
phuson 2004-11-24
to 上一楼:
你说的这个<input type="hidden" value =... name=....>分页链接无法传啊,因为分页链接是a.asp?page=2,3,……,并没有提交表单啊?我在问题五中已经讲了。
回复
zhouyouok 2004-11-23
page=request("page")
rs.open "select * from s_article where 条件
if not rs.eof then
rs.pagesize=20
if page="" then
page=1
elseif cint(page)<=0 then
page=1
elseif cint(page)>cint(rs.pagecount) then
page=cint(rs.pagecount)
else
page=cint(request("page"))
end if
rs.absolutepage=page
pagenumber=rs.absolutepage
pageall=rs.pagecount
for i=1 to 20
if rs.eof then
exit for
end if
%>
<a href="main_article.asp?a_id=<%=rs("a_id")%>"><%=rs("a_title")%></a>
<%rs.movenext
next
end if
rs.close%>
======================
<a href="main_s2.asp?l_id=<%=l_id%>&page=1">首页</a>
<a href="main_s2.asp?l_id=<%=l_id%>&page=<%=page-1%>">上一页</a>
<a href="main_s2.asp?l_id=<%=l_id%>&page=<%=page+1%>">下一页</a>
<a href="main_s2.asp?l_id=<%=l_id%>&page=<%=pagenumber%>">末页</a>
==============================
第<%=pagenumber%>页/共<%=pageall%>页
回复
zhouyouok 2004-11-23
<input type=text name=page value="<%=rs("id")%>">把文本框的值传到action
回复
phuson 2004-11-23
to:dachangtui(大长腿) ,其实我对不用传递查询条件的分页也基本懂了,就是以上问题我想进一步搞清楚。我就是多提了几个问题嘛,其实我的问题写得还是比较简洁清楚的(也花了我不少时间整理这些问题呢),还是麻烦大家帮帮我吧。
回复
dachangtui 2004-11-23
楼主,你对分页的了解还是太少了
看看这篇文章吧
http://www.ddvip.net/web/asp/client/67.htm
回复
相关推荐
发帖
ASP
创建于2007-09-28

2.8w+

社区成员

ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
申请成为版主
帖子事件
创建了帖子
2004-11-23 07:39
社区公告
暂无公告