标题:老问题:多条件组合查询后分页错误,用Session保存SQL查询语句然后传到下一 ...
取消只看楼主
towering
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:261
专家分:507
注 册:2007-10-9
结帖率:100%
已结贴  问题点数:20 回复次数:2 
老问题:多条件组合查询后分页错误,用Session保存SQL查询语句然后传到下一页。
我有一个多条件组合查询,条件最多有20多个,其中还有几个时间段的查询。所以用GET方法传值会很麻烦,想用Session保存SQL查询语句,然后再传到下一页。
和之前很多人遇到的问题一样,我们条件查询后不能点下一页,点下一页是全部数据的下一页,而不是带条件查询的下一页(嗯,这个,应该说清楚了吧?)

我有两个页面,一个是Search.asp用表单来输入查询条件, SearchEnd.asp接收表单的查询条件并显示查询结果。在论坛里搜索到https://bbs.bccn.net/thread-164379-1-1.html,看后有点启发,不过还是搞不定!他最后问题解决了,但是不知道这个response.redirect怎么用呀?写在什么地方呢?

下面是SearchEnd.asp部分代码:
程序代码:
'接收查询条件,
Dim cat
cat=0
ChaXunM=Trim(Replace(Request.Form("ChaXunM"),"'",""))
BaoGaoXH=Trim(Replace(Request.Form("BaoGaoXH"),"'",""))
'此处为省略200字... ...

'=============================================================================================================================

'If条件查询语句
        sql="select * from Reports where "
    if ChaXunM<>"" then
        sql=sql&" ChaXunM = '"&ChaXunM&"' "
        cat=1
    end if
    if BaoGaoXH<>"" and cat=1 then
        sql=sql&" and BaoGaoXH = '"&BaoGaoXH&"' "
        cat=1
    elseif BaoGaoXH<>"" then
        sql=sql&" BaoGaoXH = '"&BaoGaoXH&"' "
        cat=1
    end if
        '此处省略500字... ...
    
'==============================================================================================================================

'判断查询条件是否为空    
    If cat=0 then
        sql="select * from Reports order by id desc"
    ElseIf cat=1 then
        sql=sql&"order by id desc"
    End If

’==============================================================================================================================

'下面抄了https://bbs.bccn.net/thread-164379-1-1.html代码

page = request("Page")
''如果page是空,说明是一次新查询
if page = "" Or IsNull(page) Then
    session("searcheSql") = Sql ''新查询时把带有查询条件的SQL存放到session中
elseif session("searcheSql") = "" then
    Sql = session("searcheSql") ''翻页时从SESSION中读取带有查询条件的SQL
end if
If Page = "" Or Not IsNumeric(Page) Then
    Page = 1
End If
    
'===============================================================================================================================

'我自己的分页代码
    set rs=server.createobject("adodb.recordset")
        rs.open sql,conn,1,1
        onepage=20
        rs.pagesize=onepage
        pages=rs.pagecount
        pump=onepage*(page-1)
                '此处省略200字... ...


'==============================================================================================================================

’这里是要显示的查询结果......

'=============================================================================================================================


'关键之处终于到了:我的页面跳转链接
                                                
    if page<6 then
        firstnum=1
        lastnum=6
            if lastnum>pages then lastnum=pages
        else
        firstnum=page-3
        lastnum=page+3
            if lastnum>pages then lastnum=pages
    end if

        '下面是显示 1 2 3 4 5 6 ...的链接
        <a href="?action=search&page=1">&lt;</a>
        <%for i=firstnum to lastnum%>
        <a href="?&page=<%=i%>"><%=i%></a>
        <%next%>
        <a href="?h&page=<%=pages%>"> &gt;</a>


感谢你有耐心看完,感谢帮助!

[ 本帖最后由 towering 于 2012-8-22 18:22 编辑 ]
搜索更多相关主题的帖子: 时间段 查询 
2012-08-22 18:19
towering
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:261
专家分:507
注 册:2007-10-9
得分:0 
回复 2楼 hu9jj
版主也有这个问题可以找高人一起解决呀!

我的ASP小站:http://www./
2012-08-23 08:24
towering
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:261
专家分:507
注 册:2007-10-9
得分:0 
首先感谢 netlin ,我昨天晚上搞了一个晚上,问题已经解决了,我再测试一下你的方法,为了更多遇到这个问题的同学

不过我感觉用Session变量传递查询参数是解决这种多条件组合查询最好的方法,我这里只有20多个条件组合,要是200多个条件组合查询呢?如果用GET传递参数那得多长的代码写呀?呵呵,再说,如果这个存储SQL语句的Session过期了,用户的登陆的Session也同样过期,那他只能重新登陆。

最后还是感谢,谢谢~



经测试 netlin 的方法可行,非常感谢~

[ 本帖最后由 towering 于 2012-8-24 09:19 编辑 ]

我的ASP小站:http://www./
2012-08-24 09:07



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-379943-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.057896 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved