Ir para conteúdo

Arquivado

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

fabio_br

[Resolvido] Calculo de valores decimais

Recommended Posts

Bom dia

 

Estou migrando meu banco access para mysql e desde entaum estou tendo um problema em relação a um cálculo que faço no meu carrinho de compras.

Antes no access era fácil , pois o mesmo tem o campo do tipo moeda, tudo funcionava corretamente, mas agora que migrei o banco de dados para o mysql estou tendo problemas com os valores , estou tendo ajuda para melhorar os campos do banco em mysql pelo wagner que é moderador aki do imaster na seção Mysql, ele sugeriu que usasse valores do tipo decimais (10,2).

 

Acontece que meu cálculo agora dá erro de VBScrip:

 

Microsoft VBScript runtime error '800a000d'

 

Type mismatch

 

Vejam o código que usava:

 

ASP
Dim numpreco, numfrete, grandfinal

if Request.Cookies("client_number") = "" then

numfrete = (rsCalculo.Fields.Item("preco_frete").Value)

else

numfrete = (rsCalculo1.Fields.Item("preco_frete").Value)

end if

numpreco = objCart.GrandTotal

grandfinal = (numpreco) + (numfrete)

Session("grandfinal") = grandfinal

Session("frete") = numfrete

 

Ae após ler um pouco nos fóruns o máximo que consegui foi evitar o erro usando o código:

 

ASP
Dim numpreco, numfrete, grandfinal

if Request.Cookies("client_number") = "" then

numfrete = cdbl(rsCalculo.Fields.Item("preco_frete").Value)

else

numfrete = cdbl(rsCalculo1.Fields.Item("preco_frete").Value)

end if

numpreco = objCart.GrandTotal

 

 

grandfinal = cdbl(numpreco) + cdbl(numfrete)

Session("grandfinal") = grandfinal

Session("frete") = numfrete

 

Porém isso funcionou parcialmente, naum tenho mais erro de VBscript, porem na tabela final se os valores passados são inteiros tipo 20 30 39, fica inserido perfeitamente 20.00 30.00 39.00 , mas se o numero for quebrado por ex: 20.5 ele insere 205.00

 

Preciso de mais uma ajuda pois ja naum sei mais o que fazer .

 

Obrigado

Fabio

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu tinha muito esse problema e quebrei a cabeça pra resolver isso. Para você resolver esse tipo de problema, só substituindo esses campos do tipo decimal para o tipo double. Assim quando você utilizar o cdbl() o VBScript irá interpretar corretamente.

 

Para fazer a inserção, tem que se converter para o padrão americano (tipo 1,000,000.00 por exemplo). Utilizo essa função simples, para fazer essa conversão:

 

ASP
Function ValorMySQL(strvalor)

        if isNumeric(strvalor) then

                strvalor = FormatNumber(Cdbl(strvalor), 2)

                strvalor = replace(left(strvalor, Len(strvalor) - 3), ".", "") & replace(right(strvalor, 3), ",",".")

                strvalor = replace(left(strvalor, Len(strvalor) - 3), ",", "") & replace(right(strvalor, 3), ",",".")

                ValorMySQL = strvalor

        end if

End Function

 

Testa aí e posta se deu certo beleza?

 

http://forum.imasters.com.br/public/style_emoticons/default/natal_biggrin.gif

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.