Ir para conteúdo

POWERED BY:

Arquivado

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

4.b

Sistema de busca avançado em asp + access

Recommended Posts

Olá,

 

estou tentando desenvolver um sistema avançado de busca de produtos usando asp + access. O problema está o correndo pois a busca precisa localizar informações em diversos campos. Segue abaixo a instrução:

 

<%
campo_busca = Request.Form("busca")

SQL = "SELECT * FROM produtos "
SQL  = SQL & " WHERE exibir = true"
SQL  = SQL  & " AND detalhes LIKE '%"&campo_busca&"%'"
SQL  = SQL & " OR produto LIKE '%" &campo_busca& "%' "
SQL  = SQL  & " OR descricao LIKE '%"&campo_busca&"%' "

Set objRS_produto = Server.CreateObject("ADODB.Recordset")
objRS_produto.Open SQL, Conexao
%>

usando esse código está retornando os resultados porem tem hora que mostra os produtos indisponiveis, nao procura no campo detalhes, hora no descricao...

 

campos do banco access

exibir = campo sim/nao

detalhes e descricao = campo memorando

produto = campo text

Compartilhar este post


Link para o post
Compartilhar em outros sites

não entendi, se eles estão indisponíveis quer dizer que buscou em detalhes, produto e descrição e não achou:

 

dê um response.write na variavel SQL para ver o que apresenta!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ele esta mostrando os valores sim, porem ele ta mostrando os produto disponiveis e indisponiveis....

Muito estranho...

 

A busca deveria ser assim: SELECIONAR PRODUTO ONDE exibir= SIM E detalhes = BUSCA ou produto = BUSCA ou descricao = BUSCA

 

O codigo asp acima ta certo?

 

Escrevi e ficou assim:

SELECT * FROM produtos WHERE detalhes LIKE '%rosa%' OR produto LIKE '%rosa%' OR descricao LIKE '%rosa%' AND exibir = true

 

o problema é que a bsuca esta ignorando o exibir = true

ta mostrando tanto produtos true como os false

Compartilhar este post


Link para o post
Compartilhar em outros sites

a sua instrução SQL está certa, porem o banco nao esta filtrando a condição "TRUE"

tente colocar a condição "SIM" e faça a consulta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Filtrando com sim ele dá erro total

 

 

Microsoft JET Database Engine error '80040e10'

 

No value given for one or more required parameters.

 

/pagina_busca.asp, line 166

Compartilhar este post


Link para o post
Compartilhar em outros sites

verifique se no bd, esta corretamente o TRUE, você

também pode mudar para o tipo texto e deixar como "SIM".

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema é que quando eu uso OR a busca pelo disponivel = true nao funciona.... se eu retirar o OR funciona tudo OK

 

SQL = SQL & " AND detalhes LIKE '%"&campo_busca&"%'"

SQL = SQL & " OR produto LIKE '%" &campo_busca& "%' "

 

como fazer?

tem alguma outra coisa que posso fazer para buscar no campo detalhes e produto juntos?

Compartilhar este post


Link para o post
Compartilhar em outros sites

da uma estudada nesse código onde eu uso um form para usuário escolher na busca os critérios

AND, OR , ou palavra EXATA

 

<form method="get" action="<%= strURL %>">
					<p>
					<input type="radio" name="m" value="1" <% IF strMethod = 1 THEN response.write "checked=""checked""" END IF%> />
						E
						<input type="radio" name="m" value="2" <% IF strMethod = 2 OR strMethod = "" THEN response.write "checked=""checked""" END IF%> />
						OU
						<input type="radio" name="m" value="3" <% IF strMethod = 3 THEN response.write "checked=""checked""" END IF%> />
				   	Exato</p>

					<p><input type="text" class="input3" name="q" value="<%= Trim(strSearch) %>" /></p>

					<p><input type="submit" value="Procura" />
					<br /><br /></p>

				  </form>
				  <%



If strSearch <> "" Then


		Session("strSearch") = strSearch

		IF isnumeric(Request.QueryString("t")) = True OR Request.QueryString("t") = "" THEN

						  ' Retrieve t

						  If Request.QueryString("t") = ""  OR Request.QueryString("t") < 1 Then
							searchTable = 1 '1
						  Else

							searchTable = 1 'CInt(Request.QueryString("t"))

						  End If

		ELSE

		searchTable = 1' 1

		END IF




		' THE TABLES

		Select Case searchTable

			Case CInt("1")

					dbTable = "tMessages"
					'strDBPath = Server.MapPath("/blogg/blog.mdb")


			Case CInt("2")

					'dbTable = "events"
					'strDBPath = Server.MapPath("")

			Case Else

					dbTable = "tMessages"
					'strDBPath = Server.MapPath("")


		End Select



'------------------ SQL



				  'SPLIT STRING INTO ARRAYS
				  'FOR and AND or CLAUSE SQL


'----------------- SQL tMessages blog table

IF searchTable = "1" THEN
IF strMethod < 3 THEN


			If strMethod = 1 Then
			strSplit = Replace(strSearch," "," and ")
			Else
			strSplit = Replace(strSearch," "," or ")
			End If


			colTerms = split(strSplit," and ",-1,1)

			iUpperTerms = UBound(colTerms)

			strWhereClause = ""



			'FIELD CLAUSES

			nr = 0
			Do while nr <= 5

			nr = nr + 1

			searchField = CInt(nr)

			Select Case searchField

				Case CInt("1")

					strTableInClause = "fDate"

				Case CInt("2")

					strTableInClause = "fHeadline"

				Case CInt("3")

					strTableInClause = "fMessage"

				Case CInt("4")

					strTableInClause = "fAuthor"

				Case CInt("5")

					strTableInClause = "fnota"
				
				'Case Else


			End Select


				  For iLoop = LBound(colTerms) to iUpperTerms
					orTerms = split(colTerms(iLoop)," or ",-1,1)
					iUpperOrTerms = UBound(orTerms)
					strWhereClause = strWhereClause & ""

						for iOrLoop = LBound(orTerms) to iUpperOrTerms
								strWhereClause = strWhereClause & strTableInClause & " LIKE '%" & Trim(orTerms(iOrLoop)) & "%' "

							if iOrLoop < iUpperOrTerms then
								strWhereClause = strWhereClause & " OR "
							end if
						next

						strWhereClause = strWhereClause & ""

						if iLoop < iUpperTerms then
								strWhereClause = strWhereClause & " AND "
						end If

				  Next

				  if nr <= 4 then
				  strWhereClause = strWhereClause & " OR "
				  end if

		Loop


ELSE

' METHOD 3 EXACT PHASE WHERE

strWhereClause = "fDate LIKE '%" & strSearch & "%' OR fHeadline LIKE '%" & strSearch & "%' OR fMessage LIKE '%" & strSearch & "%' OR fAuthor LIKE '%" & strSearch & "%'  OR fnota LIKE '%" & strSearch & "%'"

END IF


strWhereClause2 = "WHERE (" & strWhereClause & ") AND (online = CBool(-1))"

' ORDER BY
strOrderClause = "ORDER BY fdate DESC"



	IF strMethod = 3 THEN

		strSQL = "SELECT * FROM "& dbTable &" "& strWhereClause2 &" "& strOrderClause &";"

	ELSE

		strSQL = "SELECT * FROM "& dbTable &" "& strWhereClause2 &" "& strOrderClause &";"

	END IF


END IF

Response.write strSQL

Compartilhar este post


Link para o post
Compartilhar em outros sites

Possivelmente é problema de parenteses, tente com esse:

SQL = "SELECT * FROM produtos "
SQL  = SQL & " WHERE exibir = true"
SQL  = SQL  & " AND (detalhes LIKE '%"&campo_busca&"%'"
SQL  = SQL & " OR produto LIKE '%" &campo_busca& "%' "
SQL  = SQL  & " OR descricao LIKE '%"&campo_busca&"%') "

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode fazer um padrão das instrução SQL e ir montando-as, conforme seu formulário, ou seja, de acordo com os critérios que o user escolhe, tipo o abaixo:

 

strWhereClause = "fDate LIKE '%" & strSearch & "%' OR fHeadline LIKE '%" & strSearch & "%' OR fMessage LIKE '%" & strSearch & "%' OR fAuthor LIKE '%" & strSearch & "%'  OR fnota LIKE '%" & strSearch & "%'"



strWhereClause2 = "WHERE (" & strWhereClause & ") 


strOrderClause = "ORDER BY fdate DESC
e depois monta a instrução:

 

strSQL = "SELECT * FROM "& dbTable &" "& strWhereClause2 &" "& strOrderClause &";"

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.