2011-11-24 88 views
0

我從表中查詢1個值。在分貝值是48.8使用ODBC時,TQuery浮點字段被隱式舍入爲整數

當我的應用程序使用BDE的本機Oracle SQL鏈接驅動程序時,一切正常,它仍然是48.8。

然後我讓應用程序使用另一個BDE別名,它使用ODBC數據源(來自Oracle的最新驅動程序)。現在顯示的數值是48.0


詳細

列是factW NUMBER(10, 3)

測試代碼:

var 
    q: TQuery; 
begin 
    q := TQuery.Create(SELF); 
    try 
    q.DatabaseName := 'Realize'; 
    q.SQL.Text := 'SELECT factW, TO_CHAR(factW) charW' 
       +'FROM bSertific WHERE id_sertific = :id'; 
    q.ParamByName('id').AsInteger := dm1.Sertif1ID_SERTIFIC.AsInteger; 
    q.Open; 

    ShowMessage(' factW = ' 
       + FloatToStrF( 
         q.FieldByName('factW').AsFloat, 
         ffFixed, 
         5, 3)         // here 48.000 
       + ' charW = ' + q.FieldByName('charW').AsString // here 48.8 
    ); 
    finally 
    q.Free; 
    end; 
end; 
+0

您知道BDE已被棄用了大約十年,是不是?不能保證它能夠與大約10年前發佈的任何ODBC驅動程序一起工作,並且解決任何驅動程序的問題,因爲這一點不太可能。 –

+0

@Ken我知道,它[自2002年起棄用](http://edn.embarcadero.com/article/28688)。這很老了,令人頭疼,實際上我正試圖遷移到ODBC,因爲在Win7上有一些BDE的問題。這就是說,我現在有問題**並重寫所有的應用程序不是幾天工作 –

+0

然後不要更新Oracle驅動程序。 :)這個問題已經有將近十年的時間了,這已經足以讓這個問題不再成爲問題。如果你能堅持你的客戶/客戶/無論什麼時候通過BDE安裝和配置過程這麼久,你可以要求他們暫時不要升級Oracle ODBC客戶端。 –

回答

0

我還沒有找到一個妥善的解決辦法。解決方法是將該字段作爲字符串查詢並在客戶端來回轉換。