d6下ado取负数的话结果都是正数,网上查了一下说是oracle数据库表的设计,number类型的必须在10位以上,
那不再改变表结果的情况下用ado怎么取出负数啊,望高手指点

解决方案 »

  1.   

    楼主我刚用D6 + Oracle 9i进行的测试,并没出现你所说的问题,负数正常返回
    Table:
    name course score
    a    aa     -80
    var
      i:integer;
    begin
      ADOQuery1.Close;
      ADOQuery1.SQL.Text := 'Select * from temp0428 where name = :name';
      ADOQuery1.Parameters.ParamByName('name').Value := 'a';
      ADOQuery1.Open;
      i := ADOQuery1.fieldByName('Score').AsInteger;
      Edit1.Text := IntToStr(i);
    end;
      

  2.   


    (
      NAME    VARCHAR2(15 BYTE),
      COURSE  VARCHAR2(20 BYTE),
      SCORE   NUMBER
    )
      

  3.   

    NUMBER 默认精度应该没有问题,精度在十位以下有问题
      

  4.   

    加了精度一样正常返回。不知道是不是Oracle版本不同,如果实现不行的话,就把oracle的number类型转为字串类型了,select to_char(score) as score  from temp0428,取出来自己再做转换吧,这样基本可以保证没有问题。  NAME    VARCHAR2(15 BYTE),
      COURSE  VARCHAR2(20 BYTE),
      SCORE   NUMBER(9,5)var
      i:Double;
    begin
      ADOQuery1.Close;
      ADOQuery1.SQL.Text := 'Select * from temp0428 where name = :name';
      ADOQuery1.Parameters.ParamByName('name').Value := 'a';
      ADOQuery1.Open;
      i := ADOQuery1.fieldByName('Score').AsFloat;
      Edit1.Text := FloatToStr(i);
    end;
      

  5.   

    根据你的结果我又试了一下SCORE    NUMBER(9,5)                           
    INSTEAD  NUMBER(9)     有问题                      
    INSTEAD1 NUMBER(9,1)                                                  
    INSTEAD3 NUMBER(11)                            
    INSTEAD4 NUMBER(10)                            
    INSTEAD5 NUMBER(5,4)                          
    INSTEAD7 NUMBER(2,1)  
    NUMBER(6)  有问题 
                                
    如果小数位精度不为0的话就不会有问题,否则位数要大于等于10