唐山网站建设

设为主页 加入收藏 繁體中文

使用Filter实现信息的2次检索

核心提示:思考1个题目:怎样实现在第1次检索的基础上进行2次检索? 通常,我们的做法是第1次检索时保存检索条件,在第2次行检索时组合两次检索条件对数据库进行1次新的查询,如: 第1次检索:Select * from table where age>18 第2次检索:Select * from table

思考1个题目:怎样实现在第1次检索的基础上进行2次检索?

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

第1次检索:Select * from table where age>18

第2次检索:Select * from table where age>18 and name like 'zh%'

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

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

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

以下为援用的内容:
<%
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 "1次检索:select * from t1 where age>20
"
Response.Write "----------------------------------

"
Do while not ors.Eof
    Response.Write ors("name") & ":" & ors("age") & "
"
    ors.MoveNext
Loop
Response.Write "总计:" & ors.RecordCount & "
"
Response.Write "----------------------------------

"


Response.Write "2次检索:Filter(name like '王%')
"
Response.Write "----------------------------------

"
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") & "
"
    ors.MoveNext
Loop
Response.Write "总计:" & ors.RecordCount & "
"
Response.Write "----------------------------------
"

ors.Close
Set ors = Nothing
oConn.Close
Set oConn = Nothing
%>

结果:

1 2 下1页

核心提示:思考1个题目:怎样实现在第1次检索的基础上进行2次检索? 通常,我们的做法是第1次检索时保存检索条件,在第2次行检索时组合两次检索条件对数据库进行1次新的查询,如: 第1次检索:Select * from table where age>18 第2次检索:Select * from table

但这还有1个题目:很多情况下两次检索其实不是同时进行的,而是在第1次检索完成后手动输进条件再进行2次检索,所以我们得想办法在2次检索时第1次检索的记录集仍存在!我们可以用Session对象!将Connection对象和RecordSet对象都保存在Session中,实现以下:

以下为援用的内容:
List.asp:
<%
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 "1次检索:select * from t1 where age>20
"
Response.Write "----------------------------------

"
Do while not Session("rs").Eof
    Response.Write Session("rs")("name") & ":" & Session("rs")("age") & "
"
    Session("rs").MoveNext
Loop
Response.Write "总计:" & Session("rs").RecordCount & "
"
Response.Write "----------------------------------

"
%>

  2次检索:
    
  

Search.asp:
<%
Response.Write "2次检索条件:" & Trim(Request("f")) & "
"
Response.Write "----------------------------------

"

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") & "
"
    Session("rs").MoveNext
loop
Response.Write "总计:" & Session("rs").RecordCount & "
"
Response.Write "----------------------------------
"
%>

 结果:

参考文章:

1.ado屡次按条件使用1个记录集中的数据的方法:http://blog.csdn.net/precipitant/archive/2005/08/04/446003.aspx

2.ado 记录集对象的filter属性使用中需留意的地方:http://blog.csdn.net/precipitant/archive/2005/12/13/550979.aspx

原文:http://www.mzwu.com/article.asp?id=1106

上1页 1 2 唐山网站建设www.fw8.net


TAG:数据库,题目,组合,对象,条件
评论加载中...
内容:
评论者: 验证码: