各位delphi高手:
   我现在遇到了一个在sqlserver 200与delphi 2005间的numeric类型的数据转换的问题,简述如下:
   我在数据库中建立了一个P_UnitW字段,numeric类型,长度为9,小数位为6,然后在delphi中通过ADOQuery控件对其进行操作,当我写入0.123456的时候,通过查询分析器可以查得已经写入进去,但是当我在delphi中将其读出,用ShowMessage(FieldByName('P_UnitW').AsString)显示它的时候发现它变成了0.1235。这是为什么呢?怎末解决呢?还望各位高手不吝赐教。
                                                         Haison

解决方案 »

  1.   

    ShowMessage(floatToStr(FieldValues['P_UnitW']));
    看看
      

  2.   

    0.1235
    照这个数据来看,是DELPHI的Currency数据类型。
      

  3.   

    你试着用 string 类型吧。读出来时用  dateset.fieldbynae(' ').asinterger 就行了。
    我也遇到这个问题。在ORACLE中。用 Number 字段。但读出来会自动 4舍5入。关注。
      

  4.   

    ShowMessage(floatToStr(FieldValues['P_UnitW']));
      显示出来的也是0.1235
      其实我先前的意图是让P_UnitW字段的值在Tedit控件中显示出来,但是它显示的却是0.1235,我以为可能是Tedit控件的某个属性设置错了,所以就用ShowMessage()的方法显示一下看看,但是也是0.1235,所以比较纳闷,但是在Sqlserver 2000的查询分析器里对其进行操作时,却一点错误都没有,我写的一段小测试程序如下:
    use Haison
    go
    set nocount on
    declare @PUnitW_before numeric(9,6),
            @PUnitW_after numeric(9,6),
            @PUnitW_Input numeric(9,6),
            @PipeNo varchar(6)
    --管号赋值
    set @PipeNo=106249
    --将要写入的值赋值
    set @PUnitW_Input=0.123456
    select @PUnitW_Input 将要写入的值
    --读出数据库中原来的值
    select @PUnitW_before=P_UnitW from Pub_Main where Pipe_No=@PipeNo
    select @PUnitW_before 原先值
    --将数据库中的字段更新
    update Pub_Main set P_UnitW=@PUnitW_Input where Pipe_No=@PipeNo 
    --再次读出数据库中的值
    select @PUnitW_after=P_UnitW from Pub_Main where Pipe_No=@PipeNo
    select @PUnitW_after 改后值
    go
      

  5.   

    问题解决了:
         感谢KeyLife在大富翁论坛的富翁笔记:
         http://www.delphibbs.com/keylife/iblog_show.asp?xid=4516 
         whbo(王红波(年轻人,要有所作为)) 应该也指的是第一种方法吧。
         即将结贴。