Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá, estou precisando de uma ajuda e ficaria muito grato se alguém pudesse me ajudar.
A questão é a seguinte, tenho um sistema de buscas paginadas de médicos em um banco de dados Access. O código busca em quatro campos da tabela: nome, endereço, cidade, e especialidade. Só que ele busca a palavra completa, se eu pesquisar oftalmologista são paulo ele não irá exibir nada, porém se procurar apenas oftalmologista ele aparecerá todos oftalmologistas de várias cidades, e se pesquisar são paulo aparecerá médicos de várias especialidades na cidade de são paulo.
O que eu precisava era algo como os sistemas de buscas de artigos científicos que usam a opção AND e OR. Na verdade eu tenho uma idéia do que deve ser feito, mas eu não sei fazer.
O que queria era que se a busca pela palavra completa não gerasse resultados, então ele optaria por fazer uma busca pelas palavras separadas, assim os usuários teriam o resultado que esperam. A parte do código que tem que ser alterada, acredito que seja esta:
<% If iRecordCount = 0 Then %>
Nenhum resultado encontrado. Tente novamente.
Seria algo assim, SE resultado = 0, então busca palavras separadamente. Só que eu não sei fazer isso. Será que alguém poderia me ajudar?
O código completo é este:
>
<%
Const adOpenStatic = 3
Const adLockReadOnly = 1
Const adCmdText = &H0001
Const PAGE_SIZE = 15
Dim strURL
Dim cnnSearch
Dim rstSearch
Dim strDBPath
Dim strSQL
Dim strSearch
Dim iPageCurrent
Dim iPageCount
Dim iRecordCount
Dim I
strURL = Request.ServerVariables("URL")
strSearch = Request.QueryString("search")
strSearch = Replace(strSearch, "'", "''")
If Request.QueryString("page") = "" Then
iPageCurrent = 1
Else
iPageCurrent = CInt(Request.QueryString("page"))
End If
%>
<p>Buscar médico:</p>
<form action="<%= strURL %>" method="get">
<input name="search" value="<%= strSearch %>" />
<input type="submit" />
</form><br /><br />
<%
If strSearch <> "" Then
strDBPath = Server.MapPath("database.mdb")
Set cnnSearch = Server.CreateObject("ADODB.Connection")
cnnSearch.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strDBPath & ";"
strSQL = "SELECT nome, endereco, cidade, especialidade " _
& "FROM medicos " _
& "WHERE nome LIKE '%" & Replace(strSearch, "'", "''") & "%' " _
& "OR endereco LIKE '%" & Replace(strSearch, "'", "''") & "%' " _
& "OR cidade LIKE '%" & Replace(strSearch, "'", "''") & "%' " _
& "OR especialidade LIKE '%" & Replace(strSearch, "'", "''") & "%' " _
& "ORDER BY nome;"
Set rstSearch = Server.CreateObject("ADODB.Recordset")
rstSearch.PageSize = PAGE_SIZE
rstSearch.CacheSize = PAGE_SIZE
rstSearch.Open strSQL, cnnSearch, adOpenStatic, adLockReadOnly, adCmdText
iRecordCount = rstSearch.RecordCount
iPageCount = rstSearch.PageCount
If iRecordCount = 0 Then
%>
<p>
<b>Nenhum resultado encontrado. Tente novamente.
</p>
<%
Else
rstSearch.AbsolutePage = iPageCurrent
%>
<hr />
<p>
<b><%= iRecordCount %> resultados encontrados</b> - Exibindo página <%= iPageCurrent %>
de <%= iPageCount %>:
</p>
<table border="1">
<%
Do While Not rstSearch.EOF And rstSearch.AbsolutePage = iPageCurrent
%>
<tr><td>Nome: <%= rstSearch.Fields("nome").Value %></td></tr>
<tr><td>Endereço: <%= rstSearch.Fields("endereco").Value %></td></tr>
<tr><td>Cidade: <%= rstSearch.Fields("cidade").Value %></td></tr>
<tr><td>Especialidade: <%= rstSearch.Fields("especialidade").Value %></td></tr>
<tr><td><br /><br /></tr>
<%
rstSearch.MoveNext
Loop
%>
</table>
<p>
<%
If iPageCurrent > 1 Then
%>
<a href="<%= strURL %>?search=<%= Server.URLEncode(strSearch) %>&page=<%= iPageCurrent - 1 %>">[<< Anterior]</a>
<%
End If
For I = 1 To iPageCount
If I = iPageCurrent Then
%>
<%= I %>
<%
Else
%>
<a href="<%= strURL %>?search=<%= Server.URLEncode(strSearch) %>&page=<%= I %>"><%= I %></a>
<%
End If
Next
If iPageCurrent < iPageCount Then
%>
<a href="<%= strURL %>?search=<%= Server.URLEncode(strSearch) %>&page=<%= iPageCurrent + 1 %>">[Próximo >>]</a>
<%
End If
%>
</p>
<%
End If
rstSearch.Close
Set rstSearch = Nothing
cnnSearch.Close
Set cnnSearch = Nothing
End If
%>
Se isso for muito difícil de fazer, poderia ser também cada busca em uma página separada, palavras completas em uma e palavras separadas em outra.
Desde já muitíssimo obrigado, sua ajuda será muito importante para mim. Obrigado http://forum.imasters.com.br/public/style_emoticons/default/natal_happy.gif
Carregando comentários...