基于ASP的站内多值搜索(6)

2008-02-23 05:31:12来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

end if
'断开数据库
set rs=nothing
conn.close
set conn=nothing
%>

理解上述程序时,着重琢磨核心部分,8组语句一一对应了3个搜索框中的8种状态

Name
Tel
School
非空
非空
非空
非空
非空
非空
非空
非空
非空
非空
非空
非空


另外trim()是VB的函数,将输入的字符串前后的空格去掉;%是SQL语言中的多字符通配符(_是单字符通配符),由此可见%"&trim()&"%对搜索框中输入的关键字是分别向左向右匹配的;SQL语言中用and连接说明非空条件之间是“与”关系。
再来看看递进法,与枚举法相比它们只有核心部分不同:
'递进法的搜索核心,依次判断条件为空否,非空则将其加入搜索条件
sql="select * from address where"
if Name<>"" then
sql=sql&" Name like '%"&Name&"%' "
flag=1
end if
if Tel<>"" and flag=1 then
sql=sql&" and Tel like '%"&Tel&"%'"
flag=1
elseif Tel<>"" then
sql=sql&" Tel like '%"&Tel&"%'"
flag=1
end if
if Company<>"" and flag=1 then
sql=sql&" and Company like '%"&Company&"%'"
flag=1
elseif Company <>"" then
sql=sql&" Company like '%"&Company&"%'"
flag=1
end if
if flag=0 then
sql="select * from address order by ID asc"
end if
rs.open sql,conn,1,1

递进法是一个明智的算法,单从语句的长短就可以看出来了。这个算法的难点和精髓就在flag和&上。首先你应该清楚&在SQL中就是一个字符串连接符,把该符号左右的字符拼接在一起。再回到程序,当Name不为空时sql="select * from address where Name like '%"&Name&"%' "同时flag=1;接下来当Name不为空时且Tel不为空时,即Tel<>"" and flag=1时,sql="select * from address where Name like '%"&Name&"%' and Tel like '%"&Tel&"%' "同时flag=1,否则当Name为空Tel不为空,sql="select * from address where Tel like '%"&Tel&"%' "同时flag=1;以此类推就可以推广到n个条件的搜索。当然条件皆为空时,即flag=0将选择所有表中所有项。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:用PreRender解决DataGrid分页最后一页行数不满的排版问题

下一篇:XLS与MDB文件格式互换全攻略