none
Campo Double, nao grava corretamente !!! RRS feed

  • Pergunta

  •  

    Olá pessoal,

     

    Como faço para salvar um campo double, pois estou fazendo assim... mas esta salvando 17559,00 e nao 175,59 no banco.

    exemplo:

     

    double m_sdoinicial = 175.59;

     

    sql = "update tb_finBanco set";

    sql += " cod_banco = @cod_banco,";

    sql += " des_banco = @des_banco,";

    sql += " cod_agencia = @cod_agencia,";

    sql += " des_agencia = @des_agencia,";

    sql += " num_conta = @num_conta,";

    sql += " obs = @obs,";

    sql += " sdoinicial = @sdoinicial,";

    sql += " limite = @limite,";

    sql += " compoesdo = @compoesdo";

    sql += " where id = @id";

    cmd.CommandText = sql;

    cmd.Parameters.Clear();

    cmd.Parameters.Add("@cod_banco", OleDbType.VarChar, 4).Value = m_codbanco;

    cmd.Parameters.Add("@des_banco", OleDbType.VarChar, 100).Value = m_desbanco;

    cmd.Parameters.Add("@cod_agencia", OleDbType.VarChar, 15).Value = m_codagencia;

    cmd.Parameters.Add("@des_agencia", OleDbType.VarChar, 50).Value = m_desagencia;

    cmd.Parameters.Add("@num_conta", OleDbType.VarChar, 15).Value = m_numconta;

    cmd.Parameters.Add("@obs", OleDbType.VarChar, 255).Value = m_obs;

    cmd.Parameters.Add("@sdoinicial", OleDbType.Decimal).Value = m_sdoinicial;

    cmd.Parameters["@sdoinicial"].Scale = 2;

    cmd.Parameters["@sdoinicial"].Precision = 18;

    cmd.Parameters.Add("@limite", OleDbType.Decimal).Value = m_limite;

    cmd.Parameters["@limite"].Scale = 2;

    cmd.Parameters["@limite"].Precision = 18;

    cmd.Parameters.Add("@compoesdo", OleDbType.Integer).Value = m_compoesdo;

    cmd.Parameters.Add("@id", OleDbType.Integer).Value = m_id;

    ret = cCON.Atualizar(cmd);

     

    obrigado,

     

    abraços..

     

     

    terça-feira, 3 de julho de 2007 19:51

Respostas

  • Rodrigo,

     

    Opa, desculpa :-)

    Duas coisas. Verifique se no campo no Access, quando você definiu ele como Number, Decimal, se você colocou o Scale dele como duas casas decimais. De repente você definiu o tipo como Number, Decimal mas não estabeleceu o número de casas decimais no banco mesmo.

    A outra sugestão é tentar trocar no seu código para OleDbType.Double, ou outro tipo de ponto flutuante e fazer o mesmo no banco de dados.

     

    Abraços,
    Francisco
    OK, Computer - http://thespoke.net/blogs/fbcjunior/default.aspx

    terça-feira, 3 de julho de 2007 21:03
    Moderador

Todas as Respostas

  • Rafael,

     

    Experimenta setar o Scale do parâmetro:

     

    cmd.Parameters["@sdoinicial"].Scale = 2;

     

    Abraços,
    Francisco
    OK, Computer - http://thespoke.net/blogs/fbcjunior/default.aspx

    terça-feira, 3 de julho de 2007 20:07
    Moderador
  • Francisco,

     

    é Rodrigo, e não Rafael... rsrsrs...

     

    eu fiz isso (olhar o codigo...)

     

    mas nao funcionou.

     

     

    terça-feira, 3 de julho de 2007 20:20
  • Olá, uma vez eu tive um problema desse com o Banco Access. Tinha a ver com a configuração do campo no banco, só que no momento não to lembrando o que era. Se o seu banco for Access vou tentar me lembrar como resolvi.

    J. Antunes

    terça-feira, 3 de julho de 2007 21:01
  • Rodrigo,

     

    Opa, desculpa :-)

    Duas coisas. Verifique se no campo no Access, quando você definiu ele como Number, Decimal, se você colocou o Scale dele como duas casas decimais. De repente você definiu o tipo como Number, Decimal mas não estabeleceu o número de casas decimais no banco mesmo.

    A outra sugestão é tentar trocar no seu código para OleDbType.Double, ou outro tipo de ponto flutuante e fazer o mesmo no banco de dados.

     

    Abraços,
    Francisco
    OK, Computer - http://thespoke.net/blogs/fbcjunior/default.aspx

    terça-feira, 3 de julho de 2007 21:03
    Moderador
  • Caramba,

     

    Francisco... voce nao erra uma !!! (risos)

     

    valew deu certo, troquei o codigo para OleDbType.Double.

     

    abraços... e até mais.

    terça-feira, 3 de julho de 2007 21:15