在DELPHI环境中,我将fox倒入SQL中(一条条循环的倒入),当倒入符点数的时候,却出现四舍五入的问题,即FOX中的数据与SQL中数据不相同。使用Tatchmove好像有同样的问题,请高手给与解决(不能修改SQL的库结构)

解决方案 »

  1.   

    解决的办法如下:
       1、在程序中建立dbase的BDE;
       2、在程序中使用fox的库;
     
      

  2.   

    fox中的数据格式是否和sql相同?delphi本身存在数据精度问题
    是否可以转化为字符在导入呢
      

  3.   

    可以用FORMAT函数控制浮点数的精度。
      

  4.   

    已经转化成字符型了,还是存在上述精度问题,既存在两个数据库的字段值相差0.01,FOX与SQL的库结构一致,但字段名不完全相同(FOX得最长字段为10位),应该是delphi本身的问题,我曾经将sql数据库的字段的符点型定义为小数点后4位,既解决了小数点后2位的精度问题,但这次不能更改sql的库结构。
      

  5.   

    我这没有fox的库,以前也没有用过问fox中数据小数几位,和sql一样都是两位吗?
    你是否将fox中得到的数据先付给一delphi变量,在存入到sql库中?ParamByName('sql').AsString:=qry.fieldbyname('fox').AsString;
    这里的sql,fox是浮点型,sql是sql库,fox是fox库中的字段,你试试呢
      

  6.   

    好像BDE没这种事,ADO的话,要将ADODataSet.EnableBCB := False,默认是:True
      

  7.   

    sql与fox同样是2位小数ParamByName('sql').AsString:=qry.fieldbyname('fox').AsString;
    这种方法就是我一开始用的方法,依然出现问题。用中间变量的方法我也试过了依然不行format来控制符点精度,我也尝试了,也不行
    不知有没有人遇到与我同样的问题。
      

  8.   

    我也遇到过这个问题,问题应该在Delphi,不过我的办法是修改数据表结构从numeric(10,2)为Money就解决了,但你不能改结构,可否先导入到第三表,再从第三表导入目的表呢?
      

  9.   

    可以尝试以下两种方法:
    1.分别在BDE中建二个别名,然后用Delphi的Datapump来导数据;
    2.赋值时用FormatFloat函数指定精度得到字符型,再传为float型(用floattostr);
      

  10.   

    建议:从fox中取出并转化为字符型(asstring),插入sql中再转化回去。
    不知道这个方法怎么样??