网站图标
蕾仔屋屋 -之黑色依然(未完成)
.::〖蕾仔BLOG〗::.
.::〖视觉欣赏〗::.
.::〖杂物杂房〗::.
.::〖资源下载〗::.
.::〖作品展览〗::.
.::〖友情连接〗::.
.::〖留言专区〗::.


BLOG类型: [搜索]
[技术]『 ERP系列 ASP access 对 多字段 多关键字 模糊搜索 』 [原创] 阅读次数: 4219
作者:蕾仔   出处:http://www.LeiZai.com加入时间:2010-11-17 21:23:47
最近在写ERP时,用户对多字段多关键字的询问让我烦啊。。

关于ASP+access 对多字段,多关键字 模糊搜索我找了好久。。
在网上有许多的。。基本都是ASP SeverSQL的,
在access里还真的没找到,难道没有??

这个搜索问题一直在脑海里有三个月了。。如果只能用access该怎么办。。

在一次使用Instr函数时,突然想到了这个问题的关键解法,哈哈


先用文字说一遍吧
1. 首先把要搜索的字段内容合并。(中间加了些特殊符号,防止两个字段之间刚好与关键字一样了)
2. 将多关键字分解。
3. 将分解好的关键字,用Instr函数一个个循环与合并好的字段判断是否存在,并标记好。
4. 将存在标记与关键字数量对比,如果一样就证明多关键字在这一条记录存在的。
5. 输出记录存在的

缺点:
也许以下代码比较费资源的。。没办法,先用着吧。。谁用更好的代码告诉我吧。
优点:
关键字可不分前后,有点百度搜索的感觉了。

现下面只写重点代码了。。。

<%
search_text=request("search_text") '搜索内容
select_sort=request("select_sort") '搜索字段,如值为 search_all:所有字段

kk_l=1 '打开搜索
    search_text=UCase(search_text) '搜索内容变大写
    search_text=replace(search_text, " ", "%") '将空格转变成%

'------------------------------------ 选择不同的SQL语句
if select_sort="search_all" then '所有类型搜索
sql="select * from stock "
    kk_l=0 '默认搜索标志为 关
  elseif select_sort="product_no" then '搜索编号类型
    sql="select * from stock where ( product_no like '%"&search_text&"%')"
  elseif select_sort="product_sort" then '搜索产品类型
    sql="select * from stock where ( product_sort like '%"&search_text&"%')"
  end if
'------------------------------------
m_n="aa.mdb" '数据库名字
'======================================================= 连接数据库
set conn=Server.CreateObject("ADODB.Connection")
conn.open "Provider=Microsoft.JET.OLEDB.4.0;Data Source= "&server.MapPath (m_n)
Set rs= Server.CreateObject("ADODB.Recordset")
'=======================================================
  rs.open sql,conn,1,1
  do while not rs.eof

if select_sort="search_all" then
    '需要搜索字段集合,转变成大写
    all_text=UCase(rs("product_no")&"^"&rs("product_name")&"^"&rs("product_format")&"^"&rs("product_format2")&"^"&rs("w_site"))

    have_t=0 '初始值
    h_k=1 '初始值

    if Instr(search_text,"%")>0 then '如果有两个以上关键字时
      search_text2=Split(search_text,"%") '用数组分解关键字
      h_k=Ubound(search_text2) '看一共有几个关键字,3代表是4个,0,1,2,3
      for i=0 to h_k '循环搜索 有多少个数组(关键字)就跑几次
        if Instr(all_text,search_text2(i))>0 then
have_t=have_t+1 '如果字体集合里有关键字时,have_t累加1,为后面验证用
end if
      next
    else '单个关键字时
      if Instr(all_text,search_text)>0 then h_k=-1
'如果字体集合里有关键字时,直接等于-1,因为后面的判断h_k已经加1
    end if
    
    if have_t=h_k+1 then '如果have_t累加的数量与关键字的数量一样时
      kk_l=1 '标志搜索打开
    else
      kk_l=0 '没有就不打开咯
    end if
  end if

'============================ 显示搜索结果
if kk_l=1 then%>

<br />
编号为:<%=rs("product_no")%><br />
名字为:<%=rs("product_name")%><br />
类型1为:<%=rs("product_format")%><br />
类型2为:<%=rs("product_format2")%><br />

<%
end if
'============================
  rs.movenext
  loop

  rs.close
  set rs=nothing
  conn.close
  set conn=nothing
%>


BLOG评论 [ 0 条] [我来说两句]
[ 还没有人说呢 ]



粤ICP备16056498号-1 [功能设定]
 
Copyright @ 2001-2024 [ L.TROY's Home AND 蕾仔屋屋 ] All Rights Reserved