delphi6  +  SQL  2000,TDBEdit绑定在后台数据库的Decimal  9(12,2)字段上,当输入整数时正常,但输入小数时,程序报告:EconvertError:"XXX  is  not  a  valid  integer  value",我检查过了,数据库中数据类型为Decimal,长度为9,精度12,小数为2,不是粗心造成的问题。但在程序运行时却报告输入的数字不是合法的Integer,我怀疑是decimal数据类型的问题,请问问题出在哪,我如何解决?  谢谢!此外,该问题我提过问,给100分,但没人答对,我想结贴,好象不将100分分完是不可以结贴,是吗?我是新手,还想将分用在最需要用的地方,怎么办?

解决方案 »

  1.   

    你是怎么输入的?以什么类型输入的?你可以在输入前用strtocurr()转化之后再入库.
      

  2.   

    对于 decimal ,Microsoft® SQL Server™ 将精度和小数位数的每个特定组合看作是不同的数据类型。例如,decimal(5,5) 和 decimal(5,0) 被当作不同的数据类型。在 Transact-SQL 语句中,带有小数点的常量自动转换为 numeric 数据值,且必然使用最小的精度和小数位数。例如,常量 12.345 被转换为 numeric 值,其精度为 5,小数位为 3。从 decimal 或 numeric 向 float 或 real 转换会导致精度损失。从 int、smallint、tinyint、float、real、money 或 smallmoney 向 decimal 或 numeric 转换会导致溢出。默认情况下,在将数字转换为较低精度和小数位数的 decimal 或 numeric 值时,SQL Server 使用舍入法。然而,如果 SET ARITHABORT 选项为 ON,当发生溢出时,SQL Server 会出现错误。若仅损失精度和小数位数,则不会产生错误。
    //我几乎没有用过这种类型,copy一端在联机帮助上找到文字,希望对你有帮助。
      

  3.   

    你的错误是 DELPHI 报告的,应该确定一下出错的语句(不一定有语句),Invaild integer 表明输入数据被转化为 integer 出问题了,所以应该查一下是否有什么地方转化数据为整型了。
      

  4.   

    可以在SQL Server把字段定義為Float﹐這也大不了哪里去啊。
      

  5.   

    我也认为是delphi中发生的错误,不是sql的问题,追下你的程序吧!
      

  6.   

    对于这类程序,我给你讲一个万能的调试法:
      在SQL2000里有一个事件监控器,可以监控所有发送给SQL2000的sql语句,
    通过观察可以准确判断出是不是SQL服务器的问题。
    如果不是SQL的问题,在delphi中转换数据前用ty ... except ...end 捕获一
    下,就知道了问题的所在!
      祝你成功!
      

  7.   

    你保存的时候
    FieldByName('FieldByNae').AsFloat := ....//就可以了
    或是换成AsString;
      

  8.   

    该问题,我已解决了,是由于程序内部使用了strtoint(单价)而造成的,是delphi的错误,谢谢各位大侠。