Ir para conteúdo

POWERED BY:

Arquivado

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

PRSolucaoWeb

Campo Decimal

Recommended Posts

Boa tarde

 

Estou aqui quebrando a minha cabeça com um problema na gravação em uma tabela no sql server, onde nesta contém campos DECIMAL (18,2).

Então quando vou gravar os dados da erro:

Microsoft OLE DB Provider for ODBC Drivers erro '80040e07'

[Microsoft][ODBC SQL Server Driver]

Error converting data type varchar to numeric.

/sistema_os_atendimento_hcs_v.2.0/hcs/ef_altera_os_manutencao.asp, linha 84

 

O modo como eu faço para gravar está nessa linha abaixo:

 

db_conn.execute ("update TB_GERAR_OF_OM_CAD_ITENS Set v_total = '"&v_total&"', sub_total = '"&sub_total&"', desconto = '"&desconto&"', total_geral = '"&total_geral&"' WHERE id=" & cdbl(id))

Esses campos que estão no update são os que dão erro ao gravar.

 

Por favor gostaria que me ajudassem a resolver este problema, por favor.

 

Muito Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que eu vi o dado que esta indo esta com "," virgula. Campo decimal ou seja DOUBLE tem que ser "." ponto.

 

Ao invés de "10,02" o correto é "10.02"

 

https://www.facebook.com/webprogramation

 

Att;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então ai utilizo essa função:

 

'Função para remover caracteres especiais dos números
Function RemoveReal(valor)
if (valor <> "") then
RemoveReal = Replace(valor, ".", ",") 'Troca vírgula por ponto
end if
End Function

 

E nos no request.form eu utilizo assim:

 

v_total = RemoveReal(Request.form("v_total_"&i))
desconto = RemoveReal(Request.form("desconto_"&i))
sub_total = RemoveReal(Request.form("sub_total_"&i))
total_geral = RemoveReal(Request.form("total_geral_"&i))

 

Mas mesmo assim não vai.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nesse exemplo esta trocando o ponto por virgula

RemoveReal = Replace(valor, ".", ",")  'Troca vírgula por ponto

 

e deveria ser

RemoveReal = Replace(valor,",",".")  'Troca vírgula por ponto

 

 

https://www.facebook.com/webprogramation

 

Att;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, já experimentou fazer uma inserção dentro do próprio sql e ver como ele está adicionando a informação? ele está pegando o valor com o apóstrofo:

 

campo='10.02', ou sem ele? ou talvez fazer um CAST na consulta de inclusão: CAST(seuvalor AS decimal(18,2))?

 

são algumas pequenas coisas, mas não custa nada verificar?

 

sds

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando você digita na própria tabela sql no campo v_total que é decimal o valor 150 ele mostra 150,00.

Eu estou começando agora a mexer mais a fundo com sqlserver.

como que faço essa consulta no proprio sql server?

Poderia me explicar por favor?

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha a coluna como que ela esta. Se tiver int ou numerico nao vai aceitar valor decimal.

 

Para aceitar valor decimal tem que esta DOUBLE. Tipo, quando vc cria uma coluna "nome" vc coloca tipo de dados varchar ou char, se for valor decimal tem que ser do tipo DOUBLE.

 

https://www.facebook.com/webprogramation

 

Att;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz um teste colocando assim no update
v_total = '80', sub_total = '80', desconto = '25', total_geral = '65'

 

Ele grava 80,00, 25,00 e 65,00.

Compartilhar este post


Link para o post
Compartilhar em outros sites

E se vc fizer outro update com

var_total='80,10', sub_total='80,10', desconto='25,05', total_geral='55,05'

 

O que ele grava?

 

https://www.facebook.com/webprogramation

 

Att;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ele da erro:

[Microsoft][ODBC SQL Server Driver]

Error converting data type varchar to numeric.

Fiz um teste utilizando '.'

 

v_total='80.10', sub_total='80.10', desconto='25.05', total_geral='55.05'

 

E gravou, na tabela grava 80,10.

 

Agora não sei o porque ele não ta indo quando eu digito no meu formulario um valor.

 

Estou vários dias tentando resolver e não consigo, ai pesquisei sobre um forum bom para tirar dúvida e fui indicado a utilizar o iMaster.

 

Obrigado



O preciso fazer para funcionar esse codigo?

Por favor, estou arrancando os meus cabelos.

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

no seu request.form vc subistitui a virgual por ponto

 

replace(request.form("valo"),",",".")

 

Dessa forma tem que salvar.

 

Se você tiver outros formulários que salva dados ai no seu banco de dados da uma olhada, talvez vc esteja esquecendo de digitar alguma coisa.

 

https://www.facebook.com/webprogramation

 

Att;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então Gilberto, eu coloquei assim:

v_total = replace(request.form("v_total_"&i),",",".")

e no update:

 

db_conn.execute ("update TB_GERAR_OF_OM_CAD_ITENS Set v_total='"&v_total&"' WHERE id=" & cdbl(id))

Olha um dos meus campos no formulario está assim:

<input name="v_total_<%=i%>" type="text" class="select51" id="v_total_<%=i%>" onKeyUp="javascript:total1(quant_<%=i%>,v_total_<%=i%>)" value="<%=g_o_m_i("v_total")%>" size="7"/>

 

Mas o erro continua, estranho que o formulario está normal, é um formulário unico.

Compartilhar este post


Link para o post
Compartilhar em outros sites

use a função: CDbl ( )

Devolve uma expressão que foi convertida para o tipo Double dentro das limitações do mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

da um response.write no dados do input pra ver o que esta sendo passado.

 

 

response.write(request.form("v_total"))

response.end()

 

Assim da pra saber de qual forma esta sendo recuperado os dados.

 

https://www.facebook.com/webprogramation

 

Att;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe a minha ignorância, mas coloquei assim e não mostra o valor:

'Atualiza informaçoes no INTERBASE 'TB_MANUTENCAO_CAD_ITENS'
db_conn.execute ("update TB_GERAR_OF_OM_CAD_ITENS Set v_total='80.10' WHERE id=" & cdbl(id))

response.write(request.form("v_total"))

response.end()

Compartilhar este post


Link para o post
Compartilhar em outros sites
CDbl(variavelquerecuperaodadodoinput)

 

 

Não esta dando pq o name do seu input não esta v_total. Faz da seguinte forma

<input name="v_total" type="text" class="select51" id="v_total" onKeyUp="javascript:total1(quant_<%=i%>,v_total_<%=i%>)" value="<%=g_o_m_i("v_total")%>" size="7"/>

 

 

https://www.facebook.com/webprogramation

 

 

Att;

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta fazer um insert no banco de dados somente com esse campo pra ve se consegue.

 

Tira todos os outros input do formulário. e so deixa esse e veja se consegue salvar.

 

Outra coisa, tira esse <%=i%> do name do input e deixa somente

<input name="v_total" type="text" class="select51" id="v_total_<%=i%>" onKeyUp="javascript:total1(quant_<%=i%>,v_total_<%=i%>)" value="<%=g_o_m_i("v_total")%>" size="7"/>

 

 

Pelo jeito quando você faz so submit o name do campo não esta sendo passado correntamente pq a gente nunca vai saber o que o <%=%> esta passando.

 

https://www.facebook.com/webprogramation

 

Att;

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.