Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

trdc

sistema de busca em BD

Recommended Posts

Galera to precisando de uma ajudinha.

Eu estou montando um sistema que busca por palavras chaves dentro de um bando de dados.

Está tudo funcionando. Resta dois problemas.

 

Primeiro não consegui fazer a palavra chave (pesquisada aparecer em negrito).

 

Segundo e mais importante, quando o usuário digita duas palavras chaves separadas a programação diz que não encontrou registro.

 

Como faço para ele poder digitar várias palavras-chaves e a programação procurar dentro dos, vários registros essas palavras digitadas?

 

Espero um help.

 

Abraços.

 

'Definindo a pesquisaDim Pesq, Campo'Pesq = Request.Form("Chave") 'Pesq = Server.URLEncode(request("Chave"))Pesq = request.querystring("Chave")'Pesq = trim(request.querystring("Chave"))'Vamos criar o objeto Record Set -> neste caso é necessário declará-lo,'pois vamos utilizar algumas funções deste objeto Set RS = Server.CreateObject("adodb.recordset")RS.PageSize = 4 'quantidade de registros por página. Você pode alterar sem conforme precise.'Vamos fazer a busca na tabela ArtigosSQL = "SELECT * FROM Artigos WHERE texto Like '%"& Pesq &"%' ORDER BY ID Desc" RS.Open SQL,Conn,3,3'Vamos agora verificar exceções do tipo “fim de arquivo” (EOF), se a página atual é menor 'que zero, se é maior que o número total de páginas, etc.IF RS.EOF then    Response.Write "nenhum registro encontrado"   Response.End 'paramos o programaELSE   'Definindo em qual pagina o visitante está   IF Request.QueryString("pagina")="" then 	  intpagina=1    ELSE	  IF cint(Request.QueryString("pagina"))<1 then		 intpagina=1 	  ELSE		 IF cint(Request.QueryString("pagina"))> RS.PageCount then 			intpagina=RS.PageCount 		 ELSE			intpagina=Request.QueryString("pagina")		 END IF	  END IF   END IFEND IF'Fim das verificações de exceções'Usamos a propriedade AbsolutePage para dizer ao RS que página ele esta RS.AbsolutePage=intpagina' Inicia o contador que vai controlar os registros mostradosintrec=0'Enquanto o contador for menor que a quantidade de registros mostrados ou' não for o final do arquivo While intrec < RS.PageSize and not RS.EOF '------------------- AQUI VEM TUDO O QUE SERÁ PAGINADO -----------------------    response.write "<B>" & RS("Titulo") & "</B>" & "<BR>"   response.write RS("texto") & "<BR><BR>"'---------------------------------------------------------------------------------------------   RS.MoveNext   ' Acrescenta +1 ao contador   intrec=intrec+1    'Se for EOF (fim de arquivo), imprimir branco na tela   IF RS.EOF then 	  response.write " "    END IFWend 'fim do loop'Vamos verificar se não é a página 1, para podermos colocar o link “anterior”. IF intpagina > 1 then %> 									   <a href="lista_busca.asp?pagina=<%=intpagina-1%>">Anterior</a> 					  <% END IF'Se não estivermos no último registro contado, então é mostrado o link p/ a próxima página IF strcomp(intpagina,RS.PageCount) <> 0 then %> 									   <a href="lista_busca.asp?pagina=<%=intpagina + 1%>">Próxima</a> 					  <% END IF%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

usa um FOR pra varrer cada palavra e montar sua sql de pesquisaquanto ao negrito basta o replace

Compartilhar este post


Link para o post
Compartilhar em outros sites

espera ai...tem um exmplo recente aqui no forum que posteija te trago...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera consegui até aqui.

Preciso de ajuda para concatenar as palavras chaves

 

<% 'Efetuando a conexão com a base de dados criada -----------------------'--------------------------------------------------------------------------'Definindo a pesquisaSet RS = Server.CreateObject("adodb.recordset")RS.PageSize = 4 'quantidade de registros por página. Você pode alterar conforme precise.'Codifica os dados recebidos formatando os caracteres especiais, neste caso,'o espaço é substituído pelo sinal (+)strProcura = request.querystring("Chave") 'Como nossa pesquisa será por "múltiplas palavras" (aqui você pode alterar ao seu gosto)'é necessário trocar o sinal de (+) pelo (%) que é usado com o LIKE na string SQLstrProcura = replace(strProcura,"+","%")'Atribui o valor postado à variável string_procuradastring_procurada = request.querystring("Chave") 'Aqui colocamos "cada" palavra em uma posição do vetor. Veja que a função Split tem como parâmetros'Split(string,separdor), onde o separador é o "espaço": "carro radio". Neste caso o VetorResultado conterá' duas palavras: carro e radioVetorResultado = Split(string_procurada," ")Dim STRSQLSTRSQL = "SELECT * FROM Artigos WHERE texto Like '%"& string_procurada &"%' ORDER BY ID Desc"RS.Open STRSQL,Con,3,3IF RS.BOF then    Response.Write "Nenhum registro encontrado"   Response.End 'paramos o programaELSEEnd ifcampo = RS("texto")For I = 0 to Ubound(VetorResultado)	campo = REPLACE(campo, VetorResultado(I),"<b>" & ucase(VetorResultado(I)) & "</b>",1,1,1)Next'Vamos agora verificar exceções do tipo “fim de arquivo” (EOF), se a página atual é menor 'que zero, se é maior que o número total de páginas, etc.IF RS.EOF then    Response.Write "Nenhum registro encontrado"   Response.End 'paramos o programaELSE   'Definindo em qual pagina o visitante está   IF Request.QueryString("pagina")="" then 	  intpagina=1    ELSE	  IF cint(Request.QueryString("pagina"))<1 then		 intpagina=1 	  ELSE		 IF cint(Request.QueryString("pagina"))> RS.PageCount then 			intpagina=RS.PageCount 		 ELSE			intpagina=Request.QueryString("pagina")		 END IF	  END IF   END IFEND IF'Fim das verificações de exceções'Usamos a propriedade AbsolutePage para dizer ao RS que página ele esta RS.AbsolutePage=intpagina' Inicia o contador que vai controlar os registros mostradosintrec=0'Enquanto o contador for menor que a quantidade de registros mostrados ou' não for o final do arquivo While intrec < RS.PageSize and not RS.EOF '------------------- AQUI VEM TUDO O QUE SERÁ PAGINADO -----------------------       response.write "<B>" & RS("Titulo") & "</B>" & "<BR>"   response.write campo & "<BR><BR>"'---------------------------------------------------------------------------------------------   RS.MoveNext   ' Acrescenta +1 ao contador   intrec=intrec+1    'Se for EOF (fim de arquivo), imprimir branco na tela   IF RS.EOF then 	  response.write " "    END IFWend 'fim do loop'Vamos verificar se não é a página 1, para podermos colocar o link “anterior”. IF intpagina > 1 then %> 									   <a href="lista_busca.asp?pagina=<%=intpagina-1%>">Anterior</a> 					  <% END IF'Se não estivermos no último registro contado, então é mostrado o link p/ a próxima página IF strcomp(intpagina,RS.PageCount) <> 0 then %> 									   <a href="lista_busca.asp?pagina=<%=intpagina + 1%>">Próxima</a> 					  <% END IF%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, vamos lá. estou quase conseguindo.Preciso só de uma ajudinha de vocês.Eu tenho que listar na minha pesquisa duas palavras diferentes.Por exemplo: carro com rádio.Preciso listar todos os textos com a palavra carro e todos com a palavra rádio.Separados.Por enquanto ele lista todos os textos que possue a palavra carro com rádio.Não separa as três palavras.Como faço?Me deem uma mão.Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

varTexto = request.form("texto")arrTexto = Split(varTexto, " ")for x = 0 to uBound(arrTexto)......next
O código acima vai pegar oque o cliente digitou e separar por 1 espaço... portanto, se ele digitou "carro rádio", vai separar por array "carro" e "rádio" (separa de acordo com o número de espaços)

 

A string SQL você faz né ?

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara a minha está assim:VetorResultado = Split(string_procurada," ")Dim STRSQLSTRSQL = "SELECT * FROM Artigos WHERE texto Like '%"& string_procurada &"%' ORDER BY ID Desc"campo = RS("texto")For I = 0 to Ubound(VetorResultado) campo = REPLACE(campo, VetorResultado(I),"<b>" & ucase(VetorResultado(I)) & "</b>",1,1,1)NextEstá certo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tá fora de ordem, e não vai funcionarO primeiro Split do VetorResultado não está servindo pra nada.... ele deveria servir pra você montar sua SQL, mas do jeito q você fez ele só está servindo pra deixar as letras em negrito e maiúsculoE praq serve aquele ,1,1,1 no seu Replace ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

hahahahahaha não faço idéia.Cópiei esse código de um outro.Por isso está esse frankistein.Como posso fazer isso???Me dê uma luz.Tem como me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

No primeiro Spit você coloca o FOR do jeito q postei lá em cimaDentro desse FOR, você acrescenta nele um :str = str & " campo like '%"& arrTexto(x) &"%' and "Resumindo, esse FOR serve pra você montar uma SQL tipo assim:"Select * from tabela where campo like '%carro%' and campo like '%radio%'"Boa sorte !

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tense assim a consulta

string_procurada = TRIM(request.querystring("Chave"))WHILE INSTR(string_procurada,"  ") > 0   string_procurada = REPLACE(string_procurada,"  "," ")WENDVetorResultado = Split(string_procurada," ")STRSQL = "SELECT * FROM Artigos WHERE "FOR I = LBOUND(VetorResultado) to UBOUND(VetorResultado)   STRSQL = STRSQL & "texto LIKE '%" & VetorResultado(I) & "%'"   IF I <> UBOUND(VetorResultado) THEN	  STRSQL = STRSQL & " AND "   END IFNEXTSTRSQL = STRSQL & " ORDER BY ID DESC"
O destaque fica igual... só os parametros opcionais do replace pra ver se ta tudo como voce quer

campo = RS("texto")FOR I = LBOUND(VetorResultado) to UBOUND(VetorResultado) campo = REPLACE(campo, VetorResultado(I),"<b>" & UCASE(VetorResultado(I)) & "</b>",1,1,1)NEXT

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui. Ele está procurando por duas palavras separadamente.

mas agora ele está repetindo a resposta. do negrito.

 

Exemplo:

 

A import⮣ia das cores nos ambientes

A fun磯 das cores n㯠頰uramente est鴩ca, elas s㯠capazes de evocar sentimentos e sensa絥s. Portanto, na hora de escolher as cores e tonalidades que ir㯠compor um

 

A import⮣ia das cores nos ambientes

A fun磯 das cores n㯠頰uramente est鴩ca, elas s㯠capazes de evocar sentimentos e sensa絥s. Portanto, na hora de escolher as cores e tonalidades que ir㯠comPOR um

 

Dai abaixo deste listado ele lista um outro tópico vindo do banco.

Home theater na sua casa

Possuir um home theater 頳come篮 Preparar o ambiente adequadamente 頥ssencial. Para quem gosta do conforto do seu lar, merece um ambiente tranq? calmo para ?

 

A import⮣ia das cores nos ambientes

A fun磯 das cores n㯠頰uramente est鴩ca, elas s㯠capazes de evocar sentimentos e sensa絥s. Portanto, na hora de escolher as cores e tonalidades que ir㯠comPOR um

 

 

E a mesma resposta em negrito do primeiro tópico. Entenderam???

Em suma o negrito não está funcionando agora.

 

Que m*****.

 

To colando o código completo para vocês olharem.

Obrigado pela paciencia.

 

 

%>

 

Set RS = Server.CreateObject("adodb.recordset")

 

RS.PageSize = 4 'quantidade de registros por página. Você pode alterar conforme precise.

 

 

string_procurada = TRIM(request.querystring("Chave"))

WHILE INSTR(string_procurada," ") > 0

string_procurada = REPLACE(string_procurada," "," ")

WEND

VetorResultado = Split(string_procurada," ")

 

STRSQL = "SELECT * FROM Artigos WHERE "

 

FOR I = LBOUND(VetorResultado) to UBOUND(VetorResultado)

STRSQL = STRSQL & "texto LIKE '%" & VetorResultado(I) & "%'"

IF I <> UBOUND(VetorResultado) THEN

STRSQL = STRSQL & " OR "

END IF

NEXT

STRSQL = STRSQL & " ORDER BY ID DESC"

 

 

 

RS.Open STRSQL,Con,3,3

 

 

IF RS.BOF then

Response.Write "Nenhum registro encontrado para as palavras pesquisadas."

Response.End 'paramos o programa

ELSE

End if

 

 

campo = RS("texto")

FOR I = LBOUND(VetorResultado) to UBOUND(VetorResultado)

campo = REPLACE(campo, VetorResultado(I),"<b>" & UCASE(VetorResultado(I)) & "</b>")

NEXT

 

 

 

 

 

 

 

 

'Vamos agora verificar exceções do tipo “fim de arquivo” (EOF), se a página atual é menor

'que zero, se é maior que o número total de páginas, etc.

IF RS.EOF then

Response.Write "Nenhum registro encontrado"

Response.End 'paramos o programa

ELSE

'Definindo em qual pagina o visitante está

IF Request.QueryString("pagina")="" then

intpagina=1

ELSE

IF cint(Request.QueryString("pagina"))<1 then

intpagina=1

ELSE

IF cint(Request.QueryString("pagina"))> RS.PageCount then

intpagina=RS.PageCount

ELSE

intpagina=Request.QueryString("pagina")

END IF

END IF

END IF

END IF

'Fim das verificações de exceções

 

'Usamos a propriedade AbsolutePage para dizer ao RS que página ele esta

RS.AbsolutePage=intpagina

 

' Inicia o contador que vai controlar os registros mostrados

intrec=0

 

'Enquanto o contador for menor que a quantidade de registros mostrados ou

' não for o final do arquivo

While intrec < RS.PageSize and not RS.EOF

'------------------- AQUI VEM TUDO O QUE SERÁ PAGINADO -----------------------

 

 

response.write "<B>" & RS("Titulo") & "</B>" & "<BR>"

response.write RS("texto") & "<BR><BR>"

response.write campo & "<BR><BR>"

'---------------------------------------------------------------------------------------------

RS.MoveNext

 

' Acrescenta +1 ao contador

intrec=intrec+1

'Se for EOF (fim de arquivo), imprimir branco na tela

IF RS.EOF then

response.write " "

END IF

Wend 'fim do loop

 

'Vamos verificar se não é a página 1, para podermos colocar o link “anterior”.

IF intpagina > 1 then

%>

<a href="lista_busca.asp?pagina=<%=intpagina-1%>">Anterior</a>

<%

END IF

 

'Se não estivermos no último registro contado, então é mostrado o link p/ a próxima página

IF strcomp(intpagina,RS.PageCount) <> 0 then

%>

<a href="lista_busca.asp?pagina=<%=intpagina + 1%>">Próxima</a>

<%

END IF

%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

acho que isso tem que tá dentro do loopcampo = RS("texto")FOR I = LBOUND(VetorResultado) to UBOUND(VetorResultado)campo = REPLACE(campo, VetorResultado(I),"<b>" & UCASE(VetorResultado(I)) & "</b>")NEXTsenão vai repetir mesmo

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.