Ir para conteúdo

POWERED BY:

Arquivado

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

Alessandro Silva

[Resolvido] Comparação com campo Moeda em Access e ASP

Recommended Posts

Pessoal, gostaria da ajuda de vocês para um probleminha que ja estou perdendo a cabeça e não consigo resolver.

 

Estou remodelando o site de uma imobiliaria e no painel de Busca por Imovel tem um campo Input no formulario de busca que estou precisando usar o conteudo dele na camparação com o que tenho armazenado no campo Valor de um banco de dados em Access e esta dando Erro de Tipo de Dado Incompativel e precisava da ajuda de você... é mais ou menos isso aqui:

 

If Request.Form("txt_valor") <> ":: INDIFERENTE ::" Then

Session("v_valor") = Request.Form("txt_valor")

End If

 

Comando = "Select * FROM imoveis Where valor <= '"& Session("v_valor") &"' Order By valor asc "

Set RecSet = DB.Execute(Comando)

 

 

OBS_1: Na tabela de Access o campo Valor esta no formato Moeda.

 

Tentei colocar o campo no access, do tipo Texto ou Numero mas na hora de ordenar crescente ou descrescente, não dá muito certo. O micro começa ordenando pelo primeiro digito, então fica tipo assim:

 

10

200

35

450

59

 

OBS_2: O campo Input do formulario está configurado para a digitação do usuario já ficar com pontuação, então o valor chega na página ASP com pontos e virgulas. Ex. 1.523,00

 

alguém pode me dar uma forcinha ai ?

 

valeu galera.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça uma verificação simples ae para saber como o sistema esta enviando a query, de um response.write no "comando" e poste o resultado aqui para a comparação.

 

* eu não entendi o por que deste if else aqui, ele não tem funçao nenhuma, em qualquer valor ou até mesmo sem valor ele ira mandar gravar a session portanto não tem lógica.

 

If Request.Form("txt_valor") <> ":: INDIFERENTE ::" Then
Session("v_valor") = Request.Form("txt_valor")
End If

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola amigo Patrique, obrigado por tentar me ajudar - é o seguinte:

 

Eu ja tenho esse costume de colocar os Response.Write para ir vendo o que vem vindo, etc.. e o resultado foi esse:

 

Finalidade: Indiferente

Imóvel: Indiferente

Tipo: Indiferente

Dormitorios: Indiferente

Valor: 830,00 - Variavel do Tipo: 8 - String

 

Usei o VarType() e o TypeName() para me dizerem o tipo exato do valor que esta vindo tambem.

 

Bom esse IF eu coloquei pois se o conteudo que vier pelo Query for igual a ":: INDIFERENTE ::" vou fazer outra coisa, mas se for igual, a Session pegará o valor que vier.

 

 

Na verdade o que acontece é o seguinte: Não estou conseguindo receber um valor através do Request.Form, guarda-lo em um variavel e depois comparar com o campo no banco de dados Access que é do tipo Moeda.

Não estou conseguindo montar o SELECT pois se dou o select, o resultado no navegador é tipo de dados incompativeis, e ja tentei varias combinações de Ccur(), FormatNumber(), FormatCurrency() e nenhuma de minhas combinações deu certo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

poste a linha de aonde esta dando Tipo de Dado Incompativel

 

em relação ao seu if e else, ele esta errado, qualquer valor que cair nele ira apresentar o resultado igual, isto por que você utilizou "<>", o certo seria utilizar "=".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Conforme o erro que copiei abaixo, é na linha 59, que é essa: (vem depois do SELECT)

 

Set RecSet = DB.Execute(Comando)

 

ERRO: ----------------------------------------------

 

HTTP 500.100 - Servidor interno Erro - erro do ASP

Internet Information Services

 

Informações técnicas (para a equipe de suporte)

 

* Tipo de erro:

Microsoft JET Database Engine (0x80040E07)

Tipo de dados imcompatível na expressão de critério.

/02 - NOVO SITE/a.asp, line 59

 

* Tipo de navegador:

Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Converta para String

 

Dim Valor
Valor = Request.Form("txt_valor")
If Cstr(Valor) <> ":: INDIFERENTE ::" Then
Session("v_valor") = Cstr(Valor)
End If

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se a solução do dee não der certo tente o fazer o query

 

Comando = "Select * FROM imoveis Where valor <= "& Session("v_valor") &" Order By valor asc "

Compartilhar este post


Link para o post
Compartilhar em outros sites

Continuou dando Erro de tipo de dado incompativel.... e no mesmo lugar... (veja o codigo)

Deu de novo na linha do DB.Execute(Comando)

 

Dim Valor, v_valor, cont

Response.Write "Finalidade: " & Request.Form("combo_finalidade") & "<br>"
Response.Write "Imóvel: " & Request.Form("combo_imovel") & "<br>"
Response.Write "Tipo: " & Request.Form("combo_tipo") & "<br>"
Response.Write "Dormitorios: " & Request.Form("combo_dormitorios") & "<br>"

Valor = Request.Form("txt_valor")

If Cstr(Valor) <> ":: INDIFERENTE ::" Then
   Session("v_valor") = Cstr(Valor)
End If

Response.Write "<br><br>"

cont = 0

%>
  <!--#include file="conexao.asp" -->
<% 

    Comando = "Select * FROM imoveis Where valor <= '"& Session("v_valor") &"' Order By valor asc "
    Set RecSet = DB.Execute(Comando)

 If RecSet.Eof Then
   Response.Write "Não encontrado !!!"
 Else
   RecSet.MoveFirst
   Do While Not RecSet.EOF
   cont = cont + 1
   
   Response.Write RecSet("valor")
   
   RecSet.MoveNext
   Loop
 End If

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se a solução do dee não der certo tente o fazer o query

 

Comando = "Select * FROM imoveis Where valor <= "& Session("v_valor") &" Order By valor asc "

 

Se tirar as aspas simples ele da pau Patrique... veja:

 

Tipo de erro:

Microsoft JET Database Engine (0x80040E14)

Erro de sintaxe (vírgula) na expressão de consulta 'valor <= 830,00'.

/02 - NOVO SITE/a.asp, line 35

 

E a linha 35 tambem é a do DB.Execute(Comando)

 

poste a linha de aonde esta dando Tipo de Dado Incompativel

 

em relação ao seu if e else, ele esta errado, qualquer valor que cair nele ira apresentar o resultado igual, isto por que você utilizou "<>", o certo seria utilizar "=".

 

Ah sim, isso eu sei... é que o código referente a quando ele for igual ainda não foi feita... preciso primeiro resolver esse problema do tipo incompativel..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Patrique, fiz umas modificações e ta quase dando certo, só que to digitando um valor no Formulario e ele parece estar vindo com 2 zeros a mais: (vou mandar abaixo a saida da tela e o código)

 

SAIDA DA TELA:

 

Finalidade: Indiferente

Imóvel: Indiferente

Tipo: Indiferente

Dormitorios: Indiferente

Valor que veio pelo Request.Form: 5,00

 

Valor após o comando Replace: 500,00

 

Referência: 001 - Valor: R$ 220,00 - Banco do tipo: 6

Referência: 002 - Valor: R$ 350,00 - Banco do tipo: 6

Referência: 003 - Valor: R$ 500,00 - Banco do tipo: 6

 

Foram encontrados: 3 imóveis.

 

 

CÓDIGO:

Dim Valor, v_valor, cont

Response.Write "Finalidade: " & Request.Form("combo_finalidade") & "<br>"
Response.Write "Imóvel: " & Request.Form("combo_imovel") & "<br>"
Response.Write "Tipo: " & Request.Form("combo_tipo") & "<br>"
Response.Write "Dormitorios: " & Request.Form("combo_dormitorios") & "<br>"
Response.Write "Valor que veio pelo Request.Form: " & Request.Form("txt_valor") & "<br>"

Valor = Request.Form("txt_valor")

Valor = replace (Valor,".","")
Valor = replace (Valor,",","")

Session("v_valor") = Valor

Response.Write "<br>Valor após o comando Replace: " &FormatNumber(Session("v_valor"),2)& "<br><br>"

cont = 0

%>
  <!--#include file="conexao.asp" -->
<% 

    Comando = "Select * FROM imoveis Where valor <= "& Session("v_valor") &" Order By valor asc "
    Set RecSet = DB.Execute(Comando)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara mais nesse caso acredito que seja o javascript da mascara do input que esteja fazendo errado, tire o javascript e tente colocar o valor manualmente sem a inserção do javascript, faça o teste e veja se vai funfar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara mais nesse caso acredito que seja o javascript da mascara do input que esteja fazendo errado, tire o javascript e tente colocar o valor manualmente sem a inserção do javascript, faça o teste e veja se vai funfar.

 

Patrique, eu acho que consegui... veja:

 

SAIDA DA TELA:

 

Finalidade: Indiferente

Imóvel: Indiferente

Tipo: Indiferente

Dormitorios: Indiferente

Valor que veio pelo Request.Form: 150.000,00

 

Referência: 001 - Valor: R$ 220,00

Referência: 002 - Valor: R$ 350,00

Referência: 003 - Valor: R$ 500,00

Referência: 004 - Valor: R$ 750,00

Referência: 005 - Valor: R$ 830,00

Referência: 006 - Valor: R$ 125.000,00

 

Foram encontrados: 6 imóveis.

 

 

CÓDIGO FONTE:

 

Valor = Request.Form("txt_valor")
Session("v_valor") = Ccur(Valor)

Response.Write "<br>"

cont = 0

%>
  <!--#include file="conexao.asp" -->
<% 

    Comando = "Select * FROM imoveis Where valor <= "& Session("v_valor") &" Order By valor asc "
    Set RecSet = DB.Execute(Comando)

 If RecSet.Eof Then
   Response.Write "Não encontrado !!!"
 Else
   RecSet.MoveFirst
   Do While Not RecSet.EOF
   cont = cont + 1
   
   Response.Write "Referência: " & RecSet("referencia") & " - Valor: " & FormatCurrency(RecSet("valor"),2) & "<br>"
   
   RecSet.MoveNext
   Loop
 End If

Response.Write "<br>Foram encontrados: " & cont & " imóveis.<br>"

Vou continuar com os testes e depois posto aqui para te dizer se funcionou tudo direitinho mesmo...

Pelo que tudo indica, parece que só o fato de jogar o Request.Form numa variavel e depois jogar essa variavel na Session ja deu certo.

 

Obrigado por tudo mesmo... muito obrigado.

Alessandro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beleza, que bom que conseguiu! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

E é estranho pois se eu colocasse o Ccur() no Select, conforme abaixo, não funcionava.

 

  Select * FROM imoveis Where valor <= "& Ccur(Session("v_valor")) &" Order By valor asc

ai eu joguei o valor do Request em uma variavel e joguei essa variavel com Ccur() na Session, ai deu certo:

 

Valor = Request.Form("txt_valor")
Session("v_valor") = Ccur(Valor)

Compartilhar este post


Link para o post
Compartilhar em outros sites

depois você pode usar o FormatCurrency ( )

 

para exibir formatada para currency ( tipo de moeda instalada no Control Panel ).

MinhaMoeda = FormatCurrency(1000) ' Devolve num servidor português "R$ 1.000,00

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vixiii doidera mesmo, por isso e por outras que eu digoooo!!! viva ao POG!!! hahahhh

 

Bom dia Patrique, tudo beleza ? Cara, estou postando aqui para dizer que realmente ta tudo funcionando legal, foi mesmo resolvido o problema... fiz vários testes e está tudo beleza.. valeu pela ajuda.

 

 

depois você pode usar o FormatCurrency ( )

 

para exibir formatada para currency ( tipo de moeda instalada no Control Panel ).

MinhaMoeda = FormatCurrency(1000) ' Devolve num servidor português "R$ 1.000,00
valeu pela dica xanburzum.. eu já conhecia essa função.. inclusive tem também a FormatNumber.. só que ela não coloca o simbolo do Real né.. R$.. mas mesmo assim agradeço muito pela boa vontade pois eu poderia não saber

 

Obrigado a todos pela ajuda.

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.