Ir para conteúdo

POWERED BY:

Arquivado

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

Superwagtel

[Resolvido] Busca Avançada

Recommended Posts

Sei fazer um sistema de busca simples no Dreamweaver

Mas preciso criar um sistema de busca com dois campos

 

No caso criei a pagina de busca com um menu de lista "marca" e um campo de texto "categoria" dentro do formulario "GET" e a action "resultado.asp"

 

Na pg "resultado.asp" preenchi o Conjunto de Registros da seguinte forma:

 

SQL:

SELECT *

FROM Categorias

WHERE marca = 'MMColParam' AND categoria = 'categoria'

 

Variáveis

MMColParam 1 Request.QueryString("marca")

categoria 1 Request.QueryString("categoria")

 

A pg resultado está dando erro:

 

Tipo de erro:

Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)

[Microsoft][Driver ODBC para Microsoft Access] Tipo de dados imcompatível na expressão de critério.

/global/adm_clientes_upload_2.asp, line 251

 

Na linha 251 está escrito:

Categorias.Open()

 

O que faço para corrigir esta página resultado.asp, já fiz a busca neste fórum e no MXStudio também, tentei várias formas diferentes de configuração, mas sem bom resultado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Priemeiramente acredito que o seu seelct esteja errado

 

deveria ser algo como

 

SELECT * FROM Categorias WHERE marca = '" & MMColParam & "' AND categoria = '" & categoria & "'"

 

Esta parte precisa estar antes de abrir a consulta com igual no lugar de 1

 

MMColParam = Request.QueryString("marca")
categoria = Request.QueryString("categoria")

modifique isso e teste se permancer o erro colocque aqui um pouco mais do seu codigo, tipo umas 10 linhas antes do erro, por favor nao poste o codigo todo pois pode ser desnecessario alem de atrapalhar uma analise do erro

 

Abraços e no aguardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz as alterações solicitadas no Conjunto de Registros, e o código ficou assim:

 

<%
Dim Categorias__MMColParam
Categorias__MMColParam = "="
If (Request.QueryString("Marca")	<> "") Then 
  Categorias__MMColParam = Request.QueryString("Marca")   
End If
%>
<%
Dim Categorias__Categoria
Categorias__Categoria = "="
If (Request.QueryString("Categoria")	  <> "") Then 
  Categorias__Categoria = Request.QueryString("Categoria")	 
End If	
%>
<%
Dim Categorias
Dim Categorias_numRows

Set Categorias = Server.CreateObject("ADODB.Recordset")
Categorias.ActiveConnection = MM_Global_STRING
Categorias.Source = "SELECT *  FROM Categorias  WHERE Marca = ' " & " + Replace(Categorias__MMColParam, "'", "''") + " & " ' AND " + Replace(Categorias__Categoria, "'", "''") + " =  ' " & " + Replace(Categorias__Categoria, "'", "''") + " & "  '"
Categorias.CursorType = 0
Categorias.CursorLocation = 2
Categorias.LockType = 1
Categorias.Open()

Categorias_numRows = 0
%>

Na página apareco o erro:

 

Tipo de erro:

Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)

[Microsoft][Driver ODBC para Microsoft Access] Erro de sintaxe na seqüência de caracteres na expressão de consulta 'Marca = ' + Replace(Categorias__MMColParam,'.

/global/adm_clientes_upload_2.asp, line 251

o a linha 251 é:

 

Categorias.Open()

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo,

 

Um conselho , porque você nao coloca os dois como menu de lista ???

 

A chance do usuário errar na hora de digitar é enorme...

 

Bom seguindo o exemplo, deve ficar assim :

 

1º - Faça a conexão novamente.

2º - Escolha a forma de pegar os dados, vide abaixo ::

 

Request.Form - Para retornar de um form

Request.Querystring - Para retornar de uma URL

Request.Session - Para retornar de uma sessão

 

Obs: O Mário Monteiro , me ensinou que nao se colocarmos somente Request, também funciona.

 

3º - Para obter o primeiro resultado coloque MMColParam como variável, clique em Test, irá aparecer uma caixa para você colocar a marca de um carro que esteja na sua base, caso a sua variavel esteja correta o teste irá ocorrer sem problemas.

 

Lembre-se que você esta querendo retornar TEXTO, então não se descuide e escolha NUMERIC nas opçoes do DW.

 

Caso tudo de certo, salve e teste ONLINE.

 

Abraços e bons estudos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se eu pudesse, lhe sugeriria que usasse o DW apenas como editor e nao como gerador de codigos

 

olha esse inicio

 

Dim Categorias__MMColParam
Categorias__MMColParam = "="
If (Request.QueryString("Marca")	<> "") Then
  Categorias__MMColParam = Request.QueryString("Marca")  
End If
%>
<%
Dim Categorias__Categoria
Categorias__Categoria = "="
If (Request.QueryString("Categoria")	  <> "") Then
  Categorias__Categoria = Request.QueryString("Categoria")	
End If

Isso seria o mesmo que

 

 

Dim Categorias__MMColParam, Categorias__Categoria
Categorias__MMColParam = Request.QueryString("Marca")  
Categorias__Categoria = Request.QueryString("Categoria")

Sem contar este nomes de variaveis que ele usa

 

Mas logico que isto nao gera erro mas alem de deixar feio o codigo copm certeza deixa mais lento

 

O erro provavel esta aqui

 

AND " + Replace(Categorias__Categoria, "'", "''") + " =  ' " & " + Replace(Categorias__Categoria, "'", "''") + " & "  '"

Voce usa o que vem do form como nome do campo e valor do campo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alguém sabe como fazer este filtro diretamente no código ?

Se puder me ensinar eu agradeço muito, por que estou desempregado e este cliente apareceu na hora certa, não posso perdê-lo !!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em minha máquina a url fica assim:

 

http://localhost/global/adm_clientes_uploa...p;Submit=Buscar

 

Mas na página sempre á apresentado a Marca correta com a última Categoria do DB referente à marca

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nao tem como vermos o que roda na sua maquina

 

que erro esta ocorrendo agora?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Superwagtel,

 

Em relação a consulta q você postou no 1º post..

eu gostaria d sugerir a você tentar usar variaveis nos campos do form d busca.

 

P/ isso, utilize nomes diferentes

("alias" ou apelidos) dos nomes dos campos originais..

por exemplo: em vez d marca e categoria eu usaria marca2 e categoria2.

 

A consulta ficaria assim:

 

SELECT *

FROM categorias

WHERE marca = 'MMColParam' AND categoria LIKE 'var'

 

E, logo abaixo, em Variaveis:

 

MMColParam 1 Request.QueryString("marca2")

var % Request.QueryString("categoria2")

 

obs:

- esse "var" é 1 exemplo, d o nome q quiser, desde q nao seja igual a nenhum outro; você deve usa-la apenas nessa consulta.

- é interessante usar o parametro "Like", e definir, na coluna do meio (Default Value), o operador coringa (%),

pq assim facilita a busca d termos semelhantes.

- verifique tb os tipos de dados (se forem texto, trabalhe como texto, se forem numeros como numeros, moedas, datas etc..)

- verifique tb se o nome da tabela está grafado corretamente ("Categorias") - a msg d erro parece ter a ver c/ isso, mas tb pode ser 1 problema d conexão; as vezes é preciso fechar a pagina no dream p/ testa-la no IE - normalmente na 1ª vez - essa dica é da Infoexame..

 

- Outro problema q pode estar ocorrendo é q no 2º campo, sendo texto, se não for digitada a palava exata,

a consulta poderá realmente não dar certo.

então concordo com o Morpheus e tb sugiro q você use 1 menu de lista.

 

em principio acho q seria isso; boa sorte e até..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agradeço muito à todos, Fernando você acertou na mosca, na verdade eu nem precisei mudar os nomes dos campos no formulário, então ficou assim:

 

SELECT *

FROM Categorias

WHERE Marca = 'MMColParam' AND Categoria LIKE 'var'

 

E, logo abaixo, em Variaveis:

 

MMColParam 1 Request.QueryString("Marca")

var % Request.QueryString("Categoria")

 

Graças à vocês todos, eu aprendi a fazer um filtro avançado, tenho em casa dois livros e várias apostilas à respeito, mas nenhum deles ensina.

 

Este tópico está resolvido

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá..

 

Então.. na verdade, aprendi sobre busca avançada no livro Dreamweaver MX,

Fernando Medeiros, Érica, pgs. 217-227.

 

E fico feliz q resolveu. Disponha e sucesso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fernando:

 

Agradeço sua boa vontade assim como a de todos que colaboram neste fórum !

 

Wagner

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.