条件查询中的分页问题
按客户给出的条件,如时间段,号码,名称等来查询数据,可是不知怎么样做到显示第二页时的数据还是满足同样条件的数据 问题点数:20、回复次数:9Top
1 楼Greendgh(自在)回复于 2001-05-29 15:36:00 得分 0
可以把条件保存在一个Session变量中。Top
2 楼freezwy(网络自由人)回复于 2001-05-29 18:24:00 得分 0
看看这个代码,里面定义一个函数.
<%
const MaxPerPage=20
dim totalPut
dim CurrentPage
dim TotalPages
dim i,j
if not isempty(request("page")) then
currentPage=cint(request("page"))
else
currentPage=1
end if
%>
<HTML><TITLE>搜索结果</TITLE>
<link rel=stylesheet href=../style.css>
<BODY topmargin=0 bgcolor="#FFFFFF" oncontextmenu="javascript:self.event.returnValue=false">
<%
skey=trim(request("acode"))
if skey="" or len(skey)<>4 then
response.redirect "s_area.asp?error="&"意外错误!"
end if
sql="select a.comname,b.username,b.cid,b.vname,b.applynum,b.salary,b.addtime from company a,cposition b where b.hukou like '%"&skey&"%' and a.loginname=b.username"
Set rs= Server.CreateObject("ADODB.Recordset")
rs.open sql,session("conn"),1,1
if rs.eof and rs.bof then
response.write "<p> <p align='center'> 目 前 还 没 有 任 何 信 息</p><p> "
else
totalPut=rs.recordcount
if currentpage<1 then
currentpage=1
end if
if (currentpage-1)*MaxPerPage>totalput then
if (totalPut mod MaxPerPage)=0 then
currentpage= totalPut \ MaxPerPage
else
currentpage= totalPut \ MaxPerPage + 1
end if
end if
if currentPage=1 then
showpage totalput,MaxPerPage,"sarea.asp",vtype,skey
showContent
showpage totalput,MaxPerPage,"sarea.asp",vtype,skey
else
if (currentPage-1)*MaxPerPage<totalPut then
rs.move (currentPage-1)*MaxPerPage
dim bookmark
bookmark=rs.bookmark
showpage totalput,MaxPerPage,"sarea.asp",vtype,skey
showContent
showpage totalput,MaxPerPage,"sarea.asp",vtype,skey
else
currentPage=1
showpage totalput,MaxPerPage,"sarea.asp",vtype,skey
showContent
showpage totalput,MaxPerPage,"sarea.asp",vtype,skey
end if
end if
end if
rs.close
set rs=nothing
sub showContent
i=0
%>
<table border=0 cellspacing=1 width="91%" align="center" cellspacing=0 cellspadding=0>
<tr bgcolor="#f3f3fa">
<td align=middle width="6%">
<div align="center"><font color="#0000FF"><span >序号</span></font></div>
</td>
<td align=middle width="31%">
<div align="center"><font color="#0000FF"><span >公司名称</span></font></div>
</td>
<td align=middle width="23%">
<div align="center"><font color="#0000FF"><span >招聘职位</span></font></div>
</td>
<td align=middle width="11%">
<div align="center"><font color="#0000FF"><span >招聘人数</span></font></div>
</td>
<td align=center width="13%"><font color="#0000FF"><span >薪金</span></font></td>
<td align=middle width="16%">
<div align="center"><font color="#0000FF">发布日期</font></div>
</td>
</tr>
<%do while not rs.eof%>
<tr>
<td align=middle bgcolor=#ffffff width="6%">
<%if currentpage=1 then%>
<%=i+1%>
<%else%>
<%=maxperpage*currentpage+i%>
<%end if%>
</td>
<td bgcolor=#ffffff width="31%" >
<a href="company.asp?cid=<%=trim(rs(1))%>" ><%=replace(rs(0),skey,"<font color=red>"&skey&"</font>")%></a></td>
<td bgcolor=#ffffff width="23%" !align="center"> <a href="jobinfo.asp?cid=<%=trim(rs(1))&"&jobno="&rs(2)%>"><%=rs(3)%></a></td>
<td align=center bgcolor=#ffffff width="11%" >
<%if rs(4)=0 then%>
不限
<%else%>
<%=rs(4)%>
<%end if%>
</td>
<td align=right bgcolor=#ffffff width="13%" >
<%if split(rs(5),"-")(0)=0 then
response.write "面议"
else
select case split(rs(5),"-")(2)
case 1
response.write "年薪:"
case 2
response.write "月薪:"
case 3
response.write "日薪:"
case 4
response.write "时薪:"
end select
response.write split(rs(5),"-")(0)&" "
select case split(rs(5),"-")(1)
case 0
response.write "RMB"
case 1
response.write "US$"
case 2
response.write "HK$"
end select
end if
%>
</td>
<td align=right bgcolor=#ffffff width="16%" ><%=formatdatetime(rs(6),1)%></td>
</tr>
<% i=i+1
if i>=MaxPerPage then exit do
rs.movenext
loop
%>
</table>
<p>
<% end sub
function showpage(totalnumber,maxperpage,filename,ctype,keyw)
dim n
if totalnumber mod maxperpage=0 then
n= totalnumber \ maxperpage
else
n= totalnumber \ maxperpage+1
end if
response.write "<form method=Post action="&filename&">"
response.write "<p align='center'>"
if CurrentPage<2 then
response.write "首页 上一页 "
else
response.write "<a href="&filename&"?page=1"&"&ctype="&ctype&"&skey="&keyw&">首页</a> "
response.write "<a href="&filename&"?page="&CurrentPage-1&"&ctype="&ctype&"&skey="&keyw&">上一页</a> "
end if
if n-currentpage<1 then
response.write "下一页 尾页"
else
response.write "<a href="&filename&"?page="&(CurrentPage+1)&"&ctype="&ctype&"&skey="&keyw
response.write ">下一页</a> <a href="&filename&"?page="&n&"&ctype="&ctype&"&skey="&keyw&">尾页</a>"
end if
response.write " 页次:<strong><font color=red>"&CurrentPage&"</font>/"&n&"</strong>页 "
response.write " 共<b>"&totalnumber&"</b>条信息 <b>"&maxperpage&"</b>条信息/页 "
response.write " 转到:<input type='text' name='page' size=2 maxlength=10 class=smallInput value="¤tpage&">"
response.write " <input type='submit' class=buttonface value='转到' name='cndok'></span></p></form>"
end function
%>
</p>
</BODY>
</HTML>
Top
3 楼zjtn(梦居士)回复于 2001-05-29 20:06:00 得分 0
你是不是没有给rs.absolutePage赋值?Top
4 楼firedragoninhell(SZGODDON)回复于 2001-05-29 20:20:00 得分 0
多传参数啦,在程序中多做一些判断就行了。Top
5 楼firedragoninhell(SZGODDON)回复于 2001-05-29 20:23:00 得分 5
可以这样思考:
不管到那一页,实际上根据所需页数和各种条件,重新进行了一次查询。Top
6 楼aha111(野百合)回复于 2001-05-31 10:42:00 得分 0
我好象给不了分。
Greendgh(天高鸟):好
firedragoninhell(地獄炎龍):我以前都是象你说的那样做,可是现在条件太多,参数太多,搞得判断逻辑好混乱,而且要重新查浪费时间,有没有简单可行的办法?有没有办法可以把查询结果的数据集保存下来?
Top
7 楼Greendgh(自在)回复于 2001-06-01 09:10:00 得分 10
If IsObject(Session("M1_rs")) Then
Set rs = Session("M1_rs")
Else
sql = "SELECT * FROM [M1]"加上你的条件
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open sql, conn, 3, 3
If rs.eof Then
rs.AddNew
End If
Set Session("M1_rs") = rs
End IfTop
8 楼Go_Rush(我的技术博客http://ashun.cnblogs.com/)回复于 2001-06-01 09:54:00 得分 5
你的问题我也遇到过,可以这样解决.
1.在页面开始时先判断页面的提交方式,如果是post方法
(用户选择了查询条件,并按下了提交这个按钮),则处理用户的条件,生成sql语句,
把你的Sql语句存在session中,再执行sql查询,
2.如果是get方法,(一般是用户,按下了"下一页","尾页"等按钮,)则从session中取
sql语句,
sql=session(QUERY_SQL)
conn.execute sql
......
3.一但查询的条件有所改变,你更新session(QUERY_SQL)的值即可
BTW:有没有办法可以把查询结果的数据集保存下来?
这种方式是不可行的,跨页保存查询结果的数据集,
1。如果用到session数组,耗费的服务器的内存是巨大的,仅几十个并发用户查询就有可能让你的服务器当机
2。如果用文件保存查询结果的数据集,其操作之烦会使你的程序更复杂,而且速度也比再次查询
快不了多少
祝你成功,问题解决了要给分哦
Top
9 楼aha111(野百合)回复于 2001-06-01 10:21:00 得分 0
//Top




