INSERT INTO COM VALORES DOUBLE NAO VAI.
Boa tarde!
Estou fazendo um INSERT INTO da seguite forma:
As variáveis a,b,c,d... são valores tipo double, data, integer, string...
O problema está nos valores DOUBLE. Especificamente as variáveis tipo DOUBLE f (guarda o valor total) e h (guarda um valor parcelado), quando tentam ser adicionadas no banco, dá pau.
A mensagem de erro é [Ô]DATA TRUNCATED COLUMN FOR COLUMN...[Ô] a mesma deste post:
http://www.vbmania.com.br/pages/index.php?varModulo=Forum&varMethod=Abrir&varID=275931&varWorld=
Mas não deu pra ler... o texto tá todo esquisito.
Os campos que dão os erros são DOUBLE, já que os valores são do tipo 99,99. Já mudei para FLOAT e outros mais mas sempre dá o erro.
Se eu coloco a variável no formato:
f = format(valor_double, [Ô]0.00[Ô])
Dá o mesmo erro.
Se eu coloco:
f = format(data, [Ô]0,00[Ô])
o valor é arrendondado.
Usando o MySQL Administrator e fazendo uma inclusão direto no banco, fixando o valor em, digamos, 34,87, dá pau.
Se eu fizer essa mesma inclusão, só que usando ponto (assim: 34.87) dá certo.
Mas se no VB eu formatar usando a vÃrgula, o valor vira 35,00 redondo. Se formatar usando o ponto, dá pau.
E agora?
[]'s
Estou fazendo um INSERT INTO da seguite forma:
strSQL = [Ô]INSERT INTO tblpagtos [Ô] & _
[Ô](datapagto,nf,datanf,idFornec,descricao,[Ô] & _
[Ô]valortotal,parcelas,valorparcelas,vcto,tipo,obs,status,parcela) [Ô] & _
[Ô]VALUES ([ô][Ô] & a & _
[Ô][ô],[ô][Ô] & b & _
[Ô][ô],[ô][Ô] & c & _
[Ô][ô],[ô][Ô] & d & _
[Ô][ô],[ô][Ô] & e & _
[Ô][ô],[ô][Ô] & f & _
[Ô][ô],[ô][Ô] & g & _
[Ô][ô],[ô][Ô] & h & _
[Ô][ô],[ô][Ô] & i & _
[Ô][ô],[ô][Ô] & j & _
[Ô][ô],[ô][Ô] & k & _
[Ô][ô],[ô][Ô] & l & _
[Ô][ô],[ô][Ô] & m & [Ô][ô])[Ô]
[ô] cn.Execute (strSQL)
As variáveis a,b,c,d... são valores tipo double, data, integer, string...
O problema está nos valores DOUBLE. Especificamente as variáveis tipo DOUBLE f (guarda o valor total) e h (guarda um valor parcelado), quando tentam ser adicionadas no banco, dá pau.
A mensagem de erro é [Ô]DATA TRUNCATED COLUMN FOR COLUMN...[Ô] a mesma deste post:
http://www.vbmania.com.br/pages/index.php?varModulo=Forum&varMethod=Abrir&varID=275931&varWorld=
Mas não deu pra ler... o texto tá todo esquisito.
Os campos que dão os erros são DOUBLE, já que os valores são do tipo 99,99. Já mudei para FLOAT e outros mais mas sempre dá o erro.
Se eu coloco a variável no formato:
f = format(valor_double, [Ô]0.00[Ô])
Dá o mesmo erro.
Se eu coloco:
f = format(data, [Ô]0,00[Ô])
o valor é arrendondado.
Usando o MySQL Administrator e fazendo uma inclusão direto no banco, fixando o valor em, digamos, 34,87, dá pau.
Se eu fizer essa mesma inclusão, só que usando ponto (assim: 34.87) dá certo.
Mas se no VB eu formatar usando a vÃrgula, o valor vira 35,00 redondo. Se formatar usando o ponto, dá pau.
E agora?
[]'s
Já tentou um REPLACE?
f = Replace(Replace(valor_double, [Ô].[Ô], [Ô][Ô]), [Ô],[Ô], [Ô].[Ô])
FBUR,
Se são campos numéricos, porque vc incluia ASPAS SIMPLES para os relacionar? Campos numéricos não podem estar dentro de ASPAS SIMPLES, todos eles....
Experimenta sem elas: (tirei só para o F e H)
Dim F as String
Dim H as String
f = Replace(Replace(format(valor_double_f, [Ô]0.00[Ô]), [Ô].[Ô], [Ô][Ô]), [Ô],[Ô], [Ô].[Ô])
h = Replace(Replace(format(valor_double_h, [Ô]0.00[Ô]), [Ô].[Ô], [Ô][Ô]), [Ô],[Ô], [Ô].[Ô])
strSQL = [Ô]INSERT INTO tblpagtos [Ô] & _
[Ô](datapagto,nf,datanf,idFornec,descricao,[Ô] & _
[Ô]valortotal,parcelas,valorparcelas,vcto,tipo,obs,status,parcela) [Ô] & _
[Ô]VALUES ([ô][Ô] & a & _
[Ô][ô],[ô][Ô] & b & _
[Ô][ô],[ô][Ô] & c & _
[Ô][ô],[ô][Ô] & d & _
[Ô][ô],[ô][Ô] & e & _
[Ô][ô],[Ô] & f & _
[Ô],[ô][Ô] & g & _
[Ô][ô],[Ô] & h & _
[Ô],[ô][Ô] & i & _
[Ô][ô],[ô][Ô] & j & _
[Ô][ô],[ô][Ô] & k & _
[Ô][ô],[ô][Ô] & l & _
[Ô][ô],[ô][Ô] & m & [Ô][ô])[Ô]
Se são campos numéricos, porque vc incluia ASPAS SIMPLES para os relacionar? Campos numéricos não podem estar dentro de ASPAS SIMPLES, todos eles....
Experimenta sem elas: (tirei só para o F e H)
Dim F as String
Dim H as String
f = Replace(Replace(format(valor_double_f, [Ô]0.00[Ô]), [Ô].[Ô], [Ô][Ô]), [Ô],[Ô], [Ô].[Ô])
h = Replace(Replace(format(valor_double_h, [Ô]0.00[Ô]), [Ô].[Ô], [Ô][Ô]), [Ô],[Ô], [Ô].[Ô])
strSQL = [Ô]INSERT INTO tblpagtos [Ô] & _
[Ô](datapagto,nf,datanf,idFornec,descricao,[Ô] & _
[Ô]valortotal,parcelas,valorparcelas,vcto,tipo,obs,status,parcela) [Ô] & _
[Ô]VALUES ([ô][Ô] & a & _
[Ô][ô],[ô][Ô] & b & _
[Ô][ô],[ô][Ô] & c & _
[Ô][ô],[ô][Ô] & d & _
[Ô][ô],[ô][Ô] & e & _
[Ô][ô],[Ô] & f & _
[Ô],[ô][Ô] & g & _
[Ô][ô],[Ô] & h & _
[Ô],[ô][Ô] & i & _
[Ô][ô],[ô][Ô] & j & _
[Ô][ô],[ô][Ô] & k & _
[Ô][ô],[ô][Ô] & l & _
[Ô][ô],[ô][Ô] & m & [Ô][ô])[Ô]
coloque assim
,[ô][Ô] & Str(ccur(campovalor)) & [Ô][ô],[ô][Ô]
[Ô]VALUES ([ô][Ô] & str(ccur(a)) & _
[Ô][ô],[ô][Ô] & str(ccur(b)) & _
[Ô][ô],[ô][Ô] & str(ccur(c)) & _
[Ô][ô],[ô][Ô] & d & _
Citação:Já tentou um REPLACE?
f = Replace(Replace(valor_double, [Ô].[Ô], [Ô][Ô]), [Ô],[Ô], [Ô].[Ô])
Legal! Não sabia da existência dessa função... Bem útil! Funcionou belezinha. :) Usando a função Replace, dá para fazer a inclusão com ou sem aspas simples.
Só que tenho q declarar as variáveis f e h como Variant. Se for Double ou Currency, o mesmo problema acontece: 6,80 vira 680.
Uma observação, se eu fizer a inclusão através de recordset, o erro não acontece, o tipo da variável pode ser double e não preciso usar o Replace:
strSQL = [Ô]SELECT * FROM tblpagtos[Ô]
Set rs = New ADODB.Recordset
rs.Open strSQL, cn, adOpenKeyset, adLockPessimistic
rs.AddNew
rs!datapagto = a
rs!nf = b
rs!datanf = c
rs!idFornec = d
rs!descricao = e
rs!valortotal = f
rs!parcelas = g
rs!valorparcelas = h
rs!vcto = i
rs!tipo = j
rs!obs = k
rs!Status = l
rs!parcela = cont
rs.Update
Next cont
rs.Close
Set rs = Nothing
As variáveis f e h são do tipo Double e só recebem os conteúdos de Textbox. Ex: f = 56,50 e h = 28,25. E a inclusão no banco ocorre sem problemas... Pq será?
FBUR,
Você está enfrentando problemas de conversao IMPLICITA de tipos de variáveis.
O legal é trabalhar SEMPRE com o mesmo tipo de variável e todas as conversões seram EXPLICITAS para que não tenha mais surpresas. Se for gravar um [Ô]STRINGÃO[Ô] com toda a instrução SQL, converta todas as numéricas e string para evitar problemas. Claro que via Recordset você não precisa converter pois numérico é numérico e string é string mas, com certeza, é mais lento do que EXECUTE direto no SGBD. Ai vai depender do volume de dados.
Isso explanado, tem sim importância se você colocar valores numérios entre ASPAS SIMPLES pois eles terão que ser TRADUZIDOS para números antes de serem gravados. STRING é entre ASPAS SIMPLES, números NÃO.
Pense nisso... Irá ajudar bastante a melhorar a qualidade do seu código no futuro.
PS.: CONVERSÕES IMPLICITAS -> O computador tenta adivinhar o que você quer. Ex.: A$ = 10 ==> Vai virar [Ô]10[Ô]
CONVERSÕES EXPLICITAS -> você diz o que você quer e não deixa o computador tentar adivinhar. Ex.: A$ = STR(10) ==> TEM que virar [Ô]10[Ô]
Valeu. Abraços.
Você está enfrentando problemas de conversao IMPLICITA de tipos de variáveis.
O legal é trabalhar SEMPRE com o mesmo tipo de variável e todas as conversões seram EXPLICITAS para que não tenha mais surpresas. Se for gravar um [Ô]STRINGÃO[Ô] com toda a instrução SQL, converta todas as numéricas e string para evitar problemas. Claro que via Recordset você não precisa converter pois numérico é numérico e string é string mas, com certeza, é mais lento do que EXECUTE direto no SGBD. Ai vai depender do volume de dados.
Isso explanado, tem sim importância se você colocar valores numérios entre ASPAS SIMPLES pois eles terão que ser TRADUZIDOS para números antes de serem gravados. STRING é entre ASPAS SIMPLES, números NÃO.
Pense nisso... Irá ajudar bastante a melhorar a qualidade do seu código no futuro.
PS.: CONVERSÕES IMPLICITAS -> O computador tenta adivinhar o que você quer. Ex.: A$ = 10 ==> Vai virar [Ô]10[Ô]
CONVERSÕES EXPLICITAS -> você diz o que você quer e não deixa o computador tentar adivinhar. Ex.: A$ = STR(10) ==> TEM que virar [Ô]10[Ô]
Valeu. Abraços.
Tópico encerrado , respostas não são mais permitidas