当前位置: 移动技术网 > IT编程>开发语言>.net > ASP使用Filter实现信息的二次检索

ASP使用Filter实现信息的二次检索

2019年01月18日  | 移动技术网IT编程  | 我要评论

乌鲁木齐列车时刻表,思敏儿奶粉,福建师范大学论坛

思考一个问题:怎么实现在第一次检索的基础上进行二次检索?

通常,我们的做法是第一次检索时保存检索条件,在第二次行检索时组合两次检索条件对进行一次新的查询,如:

第一次检索:select * from table where age>18
第二次检索:select * from table where age>18 and name like zh%

这样做虽可以实现我们所要的结果,但效率上个人认为却大打了折扣!

能不能缓存第一次检索的记录集,第二次检索时只在缓存的记录集上进行,而不是重新对数据库进行查询?

recordset对象有个属性filter,它的作用是通过添加条件以控制欲显示的记录集,但并不影响原本的记录集!我们来看下怎么用它实现二次检索:

<%
dim oconn,ors
set oconn=server.createobject("adodb.connection")
oconn.open "provider=microsoft.jet.oledb.4.0;data source=" + server.mappath("db1.mdb")
set ors = server.createobject("adodb.recordset")
ors.open "select * from t1 where age>20",oconn,1,2

response.write "一次检索:select * from t1 where age>20<br/>"
response.write "----------------------------------<br/><br/>"
do while not ors.eof
    response.write ors("name") & ":" & ors("age") & "<br/>"
    ors.movenext
loop
response.write "总计:" & ors.recordcount & "<br/>"
response.write "----------------------------------<br/><br/>"


response.write "二次检索:filter(name like 王%)<br/>"
response.write "----------------------------------<br/><br/>"
ors.filter = "name like 王%"
if not(ors.eof and ors.bof) then ors.movefirst
do while not ors.eof
    response.write ors("name") & ":" & ors("age") & "<br/>"
    ors.movenext
loop
response.write "总计:" & ors.recordcount & "<br/>"
response.write "----------------------------------<br/>"

ors.close
set ors = nothing
oconn.close
set oconn = nothing
%>


结果:
 

但这还有一个问题:很多情况下两次检索并不是同时进行的,而是在第一次检索完成后手动输入条件再进行二次检索,所以我们得想办法在二次检索时第一次检索的记录集仍存在!我们可以用session对象!将connection对象和recordset对象都保存在session中,实现如下:

list.:

<%
set session("conn")=server.createobject("adodb.connection")
session("conn").open "provider=microsoft.jet.oledb.4.0;data source=" + server.mappath("db1.mdb")
set session("rs") = server.createobject("adodb.recordset")
session("rs").open "select * from t1 where age>20",session("conn"),1,2

response.write "一次检索:select * from t1 where age>20<br/>"
response.write "----------------------------------<br/><br/>"
do while not session("rs").eof
    response.write session("rs")("name") & ":" & session("rs")("age") & "<br/>"
    session("rs").movenext
loop
response.write "总计:" & session("rs").recordcount & "<br/>"
response.write "----------------------------------<br/><br/>"
%>
<form action="search.asp" method="post" name="form1" target="_blank">
  二次检索:
    <input name="f" type="text" id="f">
  <input type="submit" name="submit" value="提交">
</form>


search.asp:

<%
response.write "二次检索条件:" & trim(request("f")) & "<br/>"
response.write "----------------------------------<br/><br/>"

session("rs").filter = ""
session("rs").filter = trim(request("f"))
if not(session("rs").eof and session("rs").bof) then session("rs").movefirst
do while not session("rs").eof
    response.write session("rs")("id") & ":" & session("rs")("name") & "<br/>"
    session("rs").movenext
loop
response.write "总计:" & session("rs").recordcount & "<br/>"
response.write "----------------------------------<br/>"
%>


结果:
 

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网