Ir para conteúdo

Arquivado

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

DackAle

Erro no IF na busca

Recommended Posts

E ae galera =)

 

Seguinte em um site tem 3 campos com varias opções

 

Categoria

Tipo

Local

 

dentro destes 3 tem varias opções... e a ultima opção dos 3 é "todos"

 

dai a busca pode variar por exemplo ele escolhe algum valor em categoria, em tipo tb e em local ele escolhe todos, dai nos resultados ele vai me retornar a categoria escolhida junto com o tipo escolhido e todos os locais... dai tentei fazer com if, fico assim

 

var_categoria = Request.form("f_categoria")var_tipo = Request.form("f_tipo")var_local = Request.form("f_local")Response.Expires = 0Const intPageSize = 20If Request.Querystring = "" then	intCurrentPage = 1Else	intCurrentPage = CInt(Request.Querystring("CurrentPage"))	Select Case Request.Querystring("Submit")  Case "Previous" 	 intCurrentPage = intCurrentPage -1  Case "Next" 	 intCurrentPage = intCurrentPage +1  End SelectEnd IfSet exe = Server.CreateObject("ADODB.Recordset")exe.CursorLocation = adUseClientexe.CursorType = adOpenStaticexe.CacheSize = intPageSizeif var_categoria= len("todos") AND var_tipo = len("todos") AND var_local = len("todos") thensql = "SELECT * FROM imoveis ORDER BY bairro, preco DESC"elseif var_categoria = "todos" AND var_tipo = "todos" thensql = "SELECT * FROM imoveis WHERE bairro='" & var_local & "' ORDER BY bairro, preco DESC"elseif var_categoria = "todos" AND var_local = "todos" thensql = "SELECT * FROM imoveis WHERE tipo='" & var_tipo & "' ORDER BY bairro, preco DESC"elseif lvar_tipo = "todos" AND var_local = "todos" thensql = "SELECT * FROM imoveis WHERE categoria='" & categoria & "' ORDER BY bairro, preco DESC"elseif var_tipo = "todos" thensql = "SELECT * FROM imoveis WHERE bairro='" & var_local & "' AND categoria='" & var_categoria & "' ORDER BY bairro, preco DESC"elseif var_categoria = "todos" thensql = "SELECT * FROM imoveis WHERE tipo='" & var_tipo & "' AND bairro='" & var_local & "' ORDER BY bairro, preco DESC"elseif var_local = "todos" thensql = "SELECT * FROM imoveis WHERE categoria='" & categoria & "' AND tipo='" & var_tipo & "' ORDER BY bairro, preco DESC"elsesql = "SELECT * FROM imoveis WHERE categoria='" & var_categoria & "' AND bairro='" & var_local & "' AND tipo='" & var_tipo & "' ORDER BY bairro, preco DESC"end if exe.Open sql, banco, , , adCmdText

ou seja fi varias verificações com if e elseif, só que quando o "todos" é escolhido ele retorna "o nenhum registro foi encontrado", ja se escolher alguma opçãpo nas 3 categorias sem ser o todos ele me retorna normal...

 

bom quem puder me ajudar podem ver neste LINK tente fazer uma busca com os dados do lado tipo (casa, bela vista, venda) ele retorna normal, mas tenta casa, todos, todos, ele teria que retorna muitos registros, mas ele diz que não encontrou nada... ou seja quando se utiliza o "todos" em alguma categoria não retorna nada...

 

Alguem sabe como posso resolver este erro ? é muito urgente =/

 

Abraços e valeuuu galera =)

 

OBS: parte do codigo é de uma paginação... que esta OK

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dá uma testada se isso está funcionando corretamente, saiu de cabeça.

SQL = "SELECT * FROM imoveis"

If var_categoria <> "Todos" OR var_tipo <> "Todos" OR var_local <> "Todos" Then

SQL = SQL &" WHERE"

 

If Var_Categoria <> "Todos" Then SQL = SQL &" categoria='"& Var_Categoria &"'"

If Var_Categoria <> "Todos AND (Var_Tipo <> "Todos" OR Var_Local <> "Todos") Then SQL = SQL &" AND"

If Var_Tipo <> "Todos" Then SQL = SQL &" tipo='"& Var_Tipo &"'"

If Var_Tipo <> "Todos" AND Var_Local <> "Todos" Then SQL = SQL &" AND"

If Var_Local <> "Todos" Then SQL = SQL &" local='"& Var_Local &"'"

 

End If

SQL = SQL &" ORDER BY bairro, preco DESC;"

[/tr]

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dá uma testada se isso está funcionando corretamente, saiu de cabeça.

ASP [/tr][tr]SQL = "SELECT * FROM imoveis"

If var_categoria <> "Todos" OR var_tipo <> "Todos" OR var_local <> "Todos" Then

SQL = SQL &" WHERE"

 

If Var_Categoria <> "Todos" Then SQL = SQL &" categoria='"& Var_Categoria &"'"

If Var_Categoria <> "Todos AND (Var_Tipo <> "Todos" OR Var_Local <> "Todos") Then SQL = SQL &" AND"

If Var_Tipo <> "Todos" Then SQL = SQL &" tipo='"& Var_Tipo &"'"

If Var_Tipo <> "Todos" AND Var_Local <> "Todos" Then SQL = SQL &" AND"

If Var_Local <> "Todos" Then SQL = SQL &" local='"& Var_Local &"'"

 

End If

SQL = SQL &" ORDER BY bairro, preco DESC;"

[/tr]
Microsoft VBScript compilation error '800a03f9' Expected 'Then' /zequinhaimoveis.com.br_non_ssl/resultados.asp, line 36 If Var_Categoria <> "Todos AND (Var_Tipo <> "Todos" OR Var_Local <> "Todos") Then SQL = SQL &" AND"---------------------------------------------^
nossa, ta dando este erro, mas num entendi o codigo para modifica-lo...rsss

 

Abraços e valeu desde ja

Compartilhar este post


Link para o post
Compartilhar em outros sites

If Var_Categoria <> "Todos" AND (Var_Tipo <> "Todos" OR Var_Local <> "Todos") Then SQL = SQL &" AND"

 

 

 

poe a aspa

Compartilhar este post


Link para o post
Compartilhar em outros sites

Havia feito com IFs in line, mas como você não entendeu coloco da forma "normal"

SQL = "SELECT * FROM imoveis" 'Inicio o SQL

If var_categoria <> "Todos" OR var_tipo <> "Todos" OR var_local <> "Todos" Then 'Aqui testo a ocorrência de qq campo que contenha "Todos"

SQL = SQL &" WHERE" 'se não existe em todos é pq temos "detalhes" e coloco o WHERE na SQL

 

If Var_Categoria <> "Todos" Then 'Se Categoria tem detalhes, coloco na SQL

SQL = SQL &" categoria='"& Var_Categoria &"'"

End If

If Var_Categoria <> "Todos" AND (Var_Tipo <> "Todos" OR Var_Local <> "Todos") Then 'Testando se preciso colocar o AND na SQL

SQL = SQL &" AND"

End If

If Var_Tipo <> "Todos" Then 'Testando o tipo de imóvel

SQL = SQL &" tipo='"& Var_Tipo &"'"

End If

If Var_Tipo <> "Todos" AND Var_Local <> "Todos" Then ' Outro teste para inserir AND na SQL

SQL = SQL &" AND"

End If

If Var_Local <> "Todos" Then 'Verificando se local possui detalhes

SQL = SQL &" local='"& Var_Local &"'"

End If

 

End If

SQL = SQL &" ORDER BY bairro, preco DESC;" 'Terminando a SQL

[/tr]
Dá uma verificada se alguma ' ou " ficou em aberto.

 

Já corrigido! Valeu marioufpa

Compartilhar este post


Link para o post
Compartilhar em outros sites
If Var_Categoria <> "Todos" AND (Var_Tipo <> "Todos" OR Var_Local <> "Todos") Then SQL = SQL &" AND"

 

 

 

poe a aspa

Voltou com a corda toda!

 

Tu me ajudou muito quando estava começando aqui com ASP. :joia:

 

Olhinho clínico esse, heim?

 

:clap: :joia:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Voltou com a corda toda!Tu me ajudou muito quando estava começando aqui com ASP. http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Olhinho clínico esse, heim? http://forum.imasters.com.br/public/style_emoticons/default/clap.gif   http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Valew cara http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Ajudo quando posso peço ajuda quando preciso http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Salgado tentei o seu codigo e deu este erro

 

Microsoft OLE DB Provider for ODBC Drivers error '80040e10' [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1. /zequinhaimoveis.com.br_non_ssl/resultados.asp, line 53
ASP [/tr][tr]<%@ LANGUAGE="VBSCRIPT"%>

<!--#include file="includes/config.asp"-->

<!--#include file="includes/abrebanco.asp"-->

<!--#include file="includes/adovbs.inc"-->

<%

var_categoria = Request.form("f_categoria")

var_tipo = Request.form("f_tipo")

var_local = Request.form("f_local")

 

Response.Expires = 0

 

Const intPageSize = 20

 

If Request.Querystring = "" then

intCurrentPage = 1

Else

intCurrentPage = CInt(Request.Querystring("CurrentPage"))

Select Case Request.Querystring("Submit")

Case "Previous"

intCurrentPage = intCurrentPage -1

Case "Next"

intCurrentPage = intCurrentPage +1

End Select

End If

 

Set exe = Server.CreateObject("ADODB.Recordset")

exe.CursorLocation = adUseClient

exe.CursorType = adOpenStatic

exe.CacheSize = intPageSize

 

SQL = "SELECT * FROM imoveis" 'Inicio o SQL

If var_categoria <> "Todos" OR var_tipo <> "Todos" OR var_local <> "Todos" Then 'Aqui testo a ocorrência de qq campo que contenha "Todos"

SQL = SQL &" WHERE" 'se não existe em todos é pq temos "detalhes" e coloco o WHERE na SQL

 

If Var_Categoria <> "Todos" Then 'Se Categoria tem detalhes, coloco na SQL

SQL = SQL &" categoria='"& Var_Categoria &"'"

End If

If Var_Categoria <> "Todos" AND (Var_Tipo <> "Todos" OR Var_Local <> "Todos") Then 'Testando se preciso colocar o AND na SQL

SQL = SQL &" AND"

End If

If Var_Tipo <> "Todos" Then 'Testando o tipo de imóvel

SQL = SQL &" tipo='"& Var_Tipo &"'"

End If

If Var_Tipo <> "Todos" AND Var_Local <> "Todos" Then ' Outro teste para inserir AND na SQL

SQL = SQL &" AND"

End If

If Var_Local <> "Todos" Then 'Verificando se local possui detalhes

SQL = SQL &" local='"& Var_Local &"'"

End If

 

End If

SQL = SQL &" ORDER BY bairro, preco DESC;" 'Terminando a SQL

exe.Open sql, banco, , , adCmdText

 

exe.PageSize = intPageSize

If Not(exe.EOF) Then exe.AbsolutePage = intCurrentPage

 

intTotalPages = exe.PageCount

%>

[/tr]

 

e coloquei assim... algum parametro esta errado, mas sinceramente não sei o que é...

 

mas valeu desde ja a ajuda =)

 

@marioufpa: Verdade velho, nada como aprender e dpeois ajudar os outros =)

 

Abraços e valeu aos dois

Compartilhar este post


Link para o post
Compartilhar em outros sites

Logo abaixo dessa linha:

SQL = SQL &" ORDER BY bairro, preco DESC;" 'Terminando a SQL[/tr]
Coloque:
Response.Write "SQL = "& SQL

Response.End

[/tr]
E verifique se a SQL condiz com o que deveria ser.

Compartilhar este post


Link para o post
Compartilhar em outros sites

escreve na tela a variavel SQL, que fica mais facil de visualizar qual parametro ta faltandofoi mal estava postando junto com você salgado e postamos a mesma ideia

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acabei de olhar o HTML de sua página, troque o "Todos" que está no meu código por "todos", essa diferença de maiuscula e minuscula está causando esse problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

SQL = SELECT * FROM imoveis WHERE categoria='' AND tipo='' AND local='' ORDER BY bairro, preco DESC;

quando coloquei as 3 categorias como todos

SQL = SELECT * FROM imoveis WHERE categoria='casa' AND tipo='venda' AND local='Bela Vista' ORDER BY bairro, preco DESC;

ele ta pegando normal aparentemente... dai tira a linha que faz o repsosenwrite e tentei fazer a busca e me retorna o esmo erro...

Microsoft OLE DB Provider for ODBC Drivers error '80040e10' [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1. /zequinhaimoveis.com.br_non_ssl/resultados.asp, line 53

só por curiosidade o ; no final da linha do select serve pra que ? (DESC;)Abraços e valeu de novo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hmmm agora ele faz a busca certa, só que quando vai pra segunda pagina, retorna o mesmo erro

Microsoft OLE DB Provider for ODBC Drivers error '80040e10' [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1. /zequinhaimoveis.com.br_non_ssl/resultados.asp, line 53

Abraços...e valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem então deve ser devido a sua paginação, já que você não está passando os dados para a próxima página, utilize QueryString para passar esses dados, e altere seus Request.Form para só Request.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem então deve ser devido a sua paginação, já que você não está passando os dados para a próxima página, utilize QueryString para passar esses dados, e altere seus Request.Form para só Request.

BOm no caso do querystring... o que eu ia passar pela URL exatamente, para pegar e continuar a paginação ?Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

só por curiosidade o ; no final da linha do select serve pra que ? (DESC;)

Ordena em ordem decrescente de valores, quando nada é colocado, fic implicito que é em ordem crescente, voce também pode colocar explicitamente com ASC

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah, o ";"? É um padrão da linguagem SQL, significa o FINAL da instrução SQL, em ASP não é nescessário o uso, mas é um costume meu usar.

 

Sobre a QueruyString, você deve passar as variáveis que você usa na busca.

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.