asp 多字段模糊搜索的函数

作者:无名 - ASP基础 -

比较简单直接的sql语句

Recordset1.Source = "SELECT * FROM 表 WHERE 字段 LIKE '%" + Replace(Recordset1__MMColParam, "'", "''") + "%' or 字段2 like '%" + Replace(Recordset1__MMColParam, "'", "''") + "%' ORDER BY id DESC"
Recordset1.Source = "SELECT * FROM 表 WHERE 字段 LIKE '%" + Replace(Recordset1__MMColParam, "'", "''") + "%' and 字段2 = 2 ORDER BY id DESC"

下面是一些补充

函数名:keyword_sousuo
作 用:生成sql查询条件
参 数:table_field ------ 表的字段名(之间用逗号分开)
keyword ------ 搜索关键词(之间用空格分开)
返 回:sql查询条件

 核心代码

'================================================== 
'函数名:keyword_sousuo 
'作 用:生成sql查询条件 
'参 数:table_field ------ 表的字段名(之间用逗号分开) 
' keyword ------ 搜索关键词(之间用空格分开) 
'返 回:sql查询条件 
'================================================== 
function keyword_sousuo(byval table_field,byval keyword) 
 dim str01,str02,keywords,table_fields,i,j 
   
 table_fields=split(trim(table_field),",") 
 keywords=split(trim(keyword),",") 
  
 if table_field<>"" then 
  str01="("&table_fields(0)&" like '%"&keyword&"%'" 
  for j=0 to ubound(table_fields) 
  str01=str01&" or "&table_fields(j)&" like '%"&keyword&"%'" 
  next 
  str01=str01&")" 
 else 
  response.Write("<script>alert('参数错误(不能为空)!')</script>") 
  response.End() 
 end if 

 '全角--》半角 空格 
 'keyword=replace(keyword," "," ") 
 'while InStr(keyword," ")>0 
 ' keyword=replace(keyword," "," ") 
 'wend 
 keywords=split(keyword," ") 
 if ubound(keywords)>0 then 
 for i=0 to ubound(keywords) 
  str02=str02&"("&table_fields(0)&" like '%"&keywords(i)&"%'" 
  for j=1 to ubound(table_fields) 
  str02=str02&" or "&table_fields(j)&" like '%"&keywords(i)&"%'" 
  next 
  str02=str02&")" 
 next 
 str02="("&replace(str02,")(",")and(")&")" 
 keyword_sousuo="(" & str01 & "or" & str02 & ")" 
 else 
 keyword_sousuo=str01 
 end if 
end function 
'================================================== 
'函数名:keyword_tag 
'作 用:将字符串里的关键词标记为红色 
'参 数:str ------ 字符串 
' keyword ------ 标记关键词(之间用空格分开) 
'返 回:字符串(html格式) 
'================================================== 
function keyword_tag(byval str,byval keyword) 
 dim keywords,str01,str02,i 
  '全角--》半角 空格 
 'keyword=replace(keyword," "," ") 
 'while InStr(keyword," ")>0 
 ' keyword=replace(keyword," "," ") 
 'wend 
 str01=replace(str,keyword,"<font color=""#ff0000"">"&keyword&"</font>") 
  keywords=split(keyword," ") 
 if ubound(keywords)>0 then 
  str02=str 
 for i=0 to ubound(keywords) 
 str02=replace(str02,keywords(i),"<font color=""#ff0000"">"&keywords(i)&"</font>") 
 next 
  keyword_tag=str02 
 else 
 keyword_tag=str01 
 end if 
end function 
以下是一个例子 http://www.zhouhaihe.com/blog/uploads/200604/recordread.asp 

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> 
<% 
 option explicit 
 dim conn,connstr,database 
 connstr="DBQ="+server.mappath("record.mdb")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};" 
 set conn=server.CreateObject("adodb.connection") 
 conn.open connstr 

dim n,rs,page,keyword,keywords,RecordCount,pageCount,pos,i,sql_where 
n=50 
page=Request("page") 
keyword=trim(request("keyword")) 
sql_where=keyword_sousuo("title,cz,name,time",keyword) 
set rs=server.CreateObject("adodb.recordset") 
rs.open "select * from record where "&sql_where&" order by id desc",conn,1,2 
if page=0 then 
 page=1 
 end if 
RecordCount = 0 
do while not rs.Eof 
 RecordCount = RecordCount +1 
 rs.MoveNext 
loop 
if not RecordCount=0 then 
 rs.MoveFirst 
end if 
pageCount=RecordCount/n 
pageCount=int(pageCount) 
if (RecordCount mod n)>0 then 
 PageCount=PageCount +1 
end if 
%> 
<style type="text/css"> 
<!-- 
.STYLE3 {color: #666666} 
--> 
</style> 
<table width="100%" border="0" cellspacing="0" cellpadding="0"> 
 <form id="form1" name="form1" method="post" action="?"><tr><td align="center"><input name="keyword" type="text" id="keyword" value="<%=keyword%>" size="30" /> 
   <input type="submit" name="Submit" value="搜索" /> 
 <span class="STYLE3">(关键词之间用空格分开) </span></td> 
 
 </tr></form> 
 <tr> 
 <td height="5"></td> 
</table> 

<table width="600" border="1" align="center" cellpadding="4"> 
 <tr align="center"> 
 <td width="131">标题</td> 
 <td width="131">动作</td> 
 <td width="131">用户名</td> 
 <td width="132">时间</td> 
 </tr> 
<%pos=0 
do while pos<(page-1)*n 
pos=pos+1 
rs.moveNext 
loop 
i=0 
while not rs.eof and i<n 
i=i+1%> 
 <tr align="center"> 
 <td><%=keyword_tag(rs("title"),keyword)%></td> 
 <td><%=keyword_tag(rs("cz"),keyword)%></td> 
 <td><%=keyword_tag(rs("name"),keyword)%></td> 
 <td><%=keyword_tag(rs("time"),keyword)%></td> 
 </tr> 
 
 <%rs.movenext 
 wend 
 rs.close 
 set rs=nothing 
 conn.close 
 set conn=nothing 
 
'================================================== 
'函数名:keyword_sousuo 
'作 用:生成sql查询条件 
'参 数:table_field ------ 表的字段名(之间用逗号分开) 
' keyword ------ 搜索关键词(之间用空格分开) 
'返 回:sql查询条件 
'================================================== 
function keyword_sousuo(byval table_field,byval keyword) 
 dim str01,str02,keywords,table_fields,i,j 
   
 table_fields=split(trim(table_field),",") 
 keywords=split(trim(keyword),",") 
  
 if table_field<>"" then 
  str01="("&table_fields(0)&" like '%"&keyword&"%'" 
  for j=0 to ubound(table_fields) 
  str01=str01&" or "&table_fields(j)&" like '%"&keyword&"%'" 
  next 
  str01=str01&")" 
 else 
  response.Write("<script>alert('参数错误(不能为空)!')</script>") 
  response.End() 
 end if 

 '全角--》半角 空格 
 keyword=replace(keyword," "," ") 
 ' while InStr(keyword," ")>0 
 ' keyword=replace(keyword," "," ") 
 'wend 
 keywords=split(keyword," ") 
 if ubound(keywords)>0 then 
 for i=0 to ubound(keywords) 
  str02=str02&"("&table_fields(0)&" like '%"&keywords(i)&"%'" 
  for j=1 to ubound(table_fields) 
  str02=str02&" or "&table_fields(j)&" like '%"&keywords(i)&"%'" 
  next 
  str02=str02&")" 
 next 
 str02="("&replace(str02,")(",")and(")&")" 
 keyword_sousuo="(" & str01 & "or" & str02 & ")" 
 else 
 keyword_sousuo=str01 
 end if 
end function 
'================================================== 
'函数名:keyword_tag 
'作 用:将字符串里的关键词标记为红色 
'参 数:str ------ 字符串 
' keyword ------ 标记关键词(之间用空格分开) 
'返 回:字符串(html格式) 
'================================================== 
function keyword_tag(byval str,byval keyword) 
 dim keywords,str01,str02,i 
  '全角--》半角 空格 
 keyword=replace(keyword," "," ") 
 'while InStr(keyword," ")>0 
 ' keyword=replace(keyword," "," ") 
 'wend 
 str01=replace(str,keyword,"<font color=""#ff0000"">"&keyword&"</font>") 
  keywords=split(keyword," ") 
 if ubound(keywords)>0 then 
  str02=str 
 for i=0 to ubound(keywords) 
 str02=replace(str02,keywords(i),"<font color=""#ff0000"">"&keywords(i)&"</font>") 
 next 
  keyword_tag=str02 
 else 
 keyword_tag=str01 
 end if 
end function 
dim y 
%> <tr align="center"> 
 <td colspan="4"> <%=RecordCount%>个  <font color="#FF0000"><%=page%></font>/<%=pageCount%>页 
  <%=n%>个/页 转到: 
 <SELECT name="select" onchange=window.open(this.options[selectedIndex].value,'_self') > 
 <%y=1 
     do while y<pagecount+1%> 
 <OPTION value=?page=<%=y%>&keyword=<%=server.URLEncode(keyword)%> <%if cstr(page)=cstr(y) then response.Write(" selected") end if%> >第<%=y%>页</OPTION> 
 <%y=y+1 
 loop%> 
 </SELECT></td> 
 </tr> 
</table>

文章就介绍到这了,希望大家以后多多支持IT人知识库。

IT人知识库 该篇知识地址:http://www.itpeo.net/12728/370637.html





怎么巧用缓存提高asp程序的性能

<!--为了提高Asp程序的性能,人们常常将经常使用的数据缓存在 Application, 但是你修改了数据库后怎... ...

ASP 写的自动生成SELECT 表单的函数

对于ASP高手当然没什么用了,但是对于刚入门的初学者和美工就有些用处了。Function selectdo(a,d,b,... ...

统计在线人数 dxy

<%sessid=session.sessionidtimeout=5 '分钟dim conn,connstr,d... ...

ASP制作在线人数统计实例

我们先新建一个ACCESS数据库 内容为 表名:zai 字段为 1.ip 2.time 建立一个文件为index.a... ...

怎么限制同一用户名同时登陆

这个问题我的办法是,用户有个活跃时间间隔问题。超过这个活跃时间间隔的则可以认为是离线,后者可以登陆 ,如果无后者登陆,但... ...

获取图片宽度和高度的类,支持JPG,GIF,PNG,BMP

<% Class ImgWHInfo ''获取图片宽度和高度的类,支持JPG,GIF,PNG,BMP Dim AS... ...

使用模板实现ASP代码与页面分离

每个进行过较大型的ASP-Web应用程序设计的开发人员大概都有如下的经历:ASP代码与页面HTML混淆难分,业务逻辑与显... ...

使用类,实现模块化

写在前面的话:   所有写程序的人都知道,当你逐渐对您要实现的功能展开的时候,很大的时候,第一天写的东西第二天就忘了写到... ...

ASP充分利用Err.Description

我们一般在调试程序的时候,有些操作会莫名地失败,又没有错误消息提示,特别是在执行数据库操作的时候,明明执行过去了,可就是... ...

很不错的一个UBB代码

<%Function HTMLEncode(ByVal strValue) '忽略错... ...

asp 防止SQL注入代码

把下面代码复制到每个文件头部就可以防止SQL注入了,写程序安全最重要 :) <% Dim Fy_Url,... ...

asp实现无限级分类的方法js版

MenuArr=new Array()MenuLenArr=new Array()SubMenuArr=new Arra... ...

多附件上传组件演示

table{ FILTER: progid:DXImageTransform.Microsoft.Shadow(... ...

无组件生成缩略图

网上有不少生成缩略图的ASP组件。若你的虚拟空间不支持注册新组件,可能会感觉自己的网站失色不少。心晴不才,结合网上资源写... ...

怎么远程调用ACCESS数据库[要求加精!!]

使用了TCP/IP,ADO及XML(需要安装Microsoft XML 4.0。)。分服务器和客户端两部分,服务器可以多... ...

替换数据库内容

<%'####################################'替换数据库内容 lamking 2... ...

E-mail表单递交

<HTML><HEAD><META http-equiv='Content-Type' c... ...

让ASP搭配MYSQL

让ASP搭配MYSQL 所需要工具    mysql-4.1.11-win32  ... ...

生成静态页大全[ASP/PHP/ASPX]

ASP生成静态网页的方法   随着网站访问量的加大,每次从数据库读取都是以效率作为代价的,很多用ACCESS作数据库的更... ...

显示在线人数

<%NowUrl=request.servervariables("HTTP_REFERER")UserName ... ...