Há algum tempo, escrevi uma função de pesquisa difusa de vários campos (semelhante ao baidui). O código da função é o seguinte
'================================================ = =
'Nome da função: palavra-chave_sousuo
'Função: Gerar condições de consulta sql
'Parâmetros: table_field ------ nomes dos campos da tabela (separados por vírgulas)
'palavra-chave ------ Palavras-chave de pesquisa (separadas por espaços)
'Retorno: condições de consulta sql
'================================================ = =
função palavra-chave_sousuo (byval table_field, byval palavra-chave)
dim str01,str02,palavras-chave,campos_tabela,i,j
campos_tabela=split(trim(campo_tabela),,)
palavras-chave=dividir(trim(palavra-chave),,)
se campo_tabela<> então
str01=(&table_fields(0)& like '%&palavra-chave&%'
para j = 0 para ubound (table_fields)
str01=str01& ou &table_fields(j)& como '%&keyword&%'
próximo
str01=str01&)
outro
response.Write(<script>alert('Erro de parâmetro (não pode estar vazio)!')</script>)
resposta.End()
terminar se
'Largura total -> Espaço de meia largura
'palavra-chave=substituir(palavra-chave, , )
'enquanto InStr(palavra-chave,)>0
'palavra-chave=substituir(palavra-chave, , )
'vamos
palavras-chave = divisão (palavra-chave,)
se ubound(palavras-chave)>0 então
para i = 0 para ubound (palavras-chave)
str02=str02&(&table_fields(0)& como '%&palavras-chave(i)&%'
para j = 1 para ubound (table_fields)
str02=str02& ou &table_fields(j)& como '%&keywords(i)&%'
próximo
str02=str02&)
próximo
str02=(&substituir(str02,)(,)e()&)
palavra-chave_sousuo=( & str01 & ou & str02 & )
outro
palavra-chave_sousuo=str01
terminar se
função final
'================================================ = =
'Nome da função: palavra-chave_tag
'Função: Marcar as palavras-chave na string em vermelho
'Parâmetro: str ------ string
'palavra-chave ------ marca palavras-chave (separadas por espaços)
'Retorno: string (formato HTML)
'================================================ = =
função palavra-chave_tag (byval str, palavra-chave byval)
palavras-chave escuras,str01,str02,i
'Largura total -> Espaço de meia largura
'palavra-chave=substituir(palavra-chave, , )
'enquanto InStr(palavra-chave,)>0
'palavra-chave=substituir(palavra-chave, , )
'vamos
str01=substituir(str,palavra-chave,<font color=#ff0000>&palavra-chave&</font>)
palavras-chave = divisão (palavra-chave,)
se ubound(palavras-chave)>0 então
str02=str
para i = 0 para ubound (palavras-chave)
str02=substituir(str02,palavras-chave(i),<font color=#ff0000>&palavras-chave(i)&</font>)
próximo
palavra-chave_tag=str02
outro
palavra-chave_tag=str01
terminar se
função final
A seguir está um exemplo http://www.zhouhaihe.com/blog/uploads/200604/recordread.asp
<%@LANGUAGE=PÁGINA DE CÓDIGO VBSCRIPT=936%>
<%
opção explícita
dim conexão,connstr,banco de dados
connstr=DBQ=+server.mappath(record.mdb)+;DefaultDir=;DRIVER={Driver Microsoft Access (*.mdb)};
definir conn=server.CreateObject(adodb.connection)
conn.open connstr
dim n,rs,página,palavra-chave,palavras-chave,RecordCount,pageCount,pos,i,sql_where
n=50
page=Solicitação(página)
palavra-chave=trim(solicitação(palavra-chave))
sql_where=palavra-chave_sousuo(título,cz,nome,hora,palavra-chave)
definir rs=server.CreateObject(adodb.recordset)
rs.open selecione * do registro onde &sql_where& ordene por id desc,conn,1,2
se página=0 então
página=1
terminar se
Contagem de registros = 0
faça enquanto não rs.Eof
Contagem de registros = Contagem de registros +1
rs.MoveNext
laço
se não RecordCount=0 então
rs.MoveFirst
terminar se
pageCount=Contagem de registros/n
contagem de páginas=int(contagem de páginas)
se (RecordCount mod n)>0 então
Contagem de páginas = Contagem de páginas +1
terminar se
%>
<tipo de estilo=texto/css>
<!--
.STYLE3 {cor: #666666}
-->
</estilo>
<largura da tabela=100% borda=0 cellpacing=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 />
<tipo de entrada=nome de envio=valor de envio=pesquisa/>
<span class=STYLE3>(Separe as palavras-chave com espaços) </span></td>
</tr></form>
<tr>
<td altura=5></td>
</tabela>
<largura da tabela=600 borda=1 alinhar=centro cellpadding=4>
<tr alinhar=centro>
<td width=131>Título</td>
<td width=131>Ação</td>
<td width=131>Nome de usuário</td>
<td width=132>Tempo</td>
</tr>
<%pos=0
faça enquanto pos<(página-1)*n
pos=pos+1
rs.movePróximo
laço
eu=0
enquanto não rs.eof e i<n
eu=eu+1%>
<tr alinhar=centro>
<td><%=keyword_tag(rs(título),palavra-chave)%></td>
<td><%=keyword_tag(rs(cz),palavra-chave)%></td>
<td><%=keyword_tag(rs(nome),palavra-chave)%></td>
<td><%=keyword_tag(rs(time),palavra-chave)%></td>
</tr>
<%rs.movenext
vamos
rs.fechar
definir rs = nada
conexão.fechar
definir conn = nada
'================================================ = =
'Nome da função: palavra-chave_sousuo
'Função: Gerar condições de consulta sql
'Parâmetros: table_field ------ nomes dos campos da tabela (separados por vírgulas)
'palavra-chave ------ Palavras-chave de pesquisa (separadas por espaços)
'Retorno: condições de consulta sql
'================================================ = =
função palavra-chave_sousuo (byval table_field, byval palavra-chave)
dim str01,str02,palavras-chave,campos_tabela,i,j
campos_tabela=split(trim(campo_tabela),,)
palavras-chave=dividir(trim(palavra-chave),,)
se campo_tabela<> então
str01=(&table_fields(0)& like '%&palavra-chave&%'
para j = 0 para ubound (table_fields)
str01=str01& ou &table_fields(j)& como '%&keyword&%'
próximo
str01=str01&)
outro
response.Write(<script>alert('Erro de parâmetro (não pode estar vazio)!')</script>)
resposta.End()
terminar se
'Largura total -> Espaço de meia largura
palavra-chave=substituir(palavra-chave, , )
'enquanto InStr(palavra-chave,)>0
'palavra-chave=substituir(palavra-chave, , )
'vamos
palavras-chave = divisão (palavra-chave,)
se ubound(palavras-chave)>0 então
para i = 0 para ubound (palavras-chave)
str02=str02&(&table_fields(0)& como '%&palavras-chave(i)&%'
para j = 1 para ubound (table_fields)
str02=str02& ou &table_fields(j)& como '%&keywords(i)&%'
próximo
str02=str02&)
próximo
str02=(&substituir(str02,)(,)e()&)
palavra-chave_sousuo=( & str01 & ou & str02 & )
outro
palavra-chave_sousuo=str01
terminar se
função final
'================================================ = =
'Nome da função: palavra-chave_tag
'Função: Marcar as palavras-chave na string em vermelho
'Parâmetro: str ------ string
'palavra-chave ------ marca palavras-chave (separadas por espaços)
'Retorno: string (formato HTML)
'================================================ = =
função palavra-chave_tag (byval str, palavra-chave byval)
palavras-chave escuras,str01,str02,i
'Largura total -> Espaço de meia largura
palavra-chave=substituir(palavra-chave, , )
'enquanto InStr(palavra-chave,)>0
'palavra-chave=substituir(palavra-chave, , )
'vamos
str01=substituir(str,palavra-chave,<font color=#ff0000>&palavra-chave&</font>)
palavras-chave = divisão (palavra-chave,)
se ubound(palavras-chave)>0 então
str02=str
para i = 0 para ubound (palavras-chave)
str02=substituir(str02,palavras-chave(i),<font color=#ff0000>&palavras-chave(i)&</font>)
próximo
palavra-chave_tag=str02
outro
palavra-chave_tag=str01
terminar se
função final
escurecer
%> <tr alinhar=centro>
<td colspan=4> <%=RecordCount%><font color=#FF0000><%=page%></font>/<%=pageCount%> páginas
<%=n%> páginas/página acesse:
<SELECT nome=select onchange=window.open(this.options[selectedIndex].value,'_self') >
<%y=1
faça enquanto y<contagem de páginas+1%>
<OPTION value=?page=<%=y%>&keyword=<%=server.URLEncode(keyword)%> <%if cstr(page)=cstr(y) then response.Write( selecionado) end if%> > Página <%=y%></OPTION>
<%y=y+1
ciclo%>
</SELECT></td>
</tr>
</tabela>