2009-07-17 48 views
1

我有一個與Delphi 6 + Oracle 10gR2 + ADO + ClientDataSet的問題。德爾福6與ADO + Oracle返回NUMBER與不同的精度,生成BCD溢出

每當我在字段NUMBER(19,9)上運行聚合函數時,結果列會向Delphi返回一個NUMBER數據類型,並且在某些機器上它將作爲精度爲38的TBCDField加載,並且一切順利,但在某些機器上,它以TBCDField的形式加載,精度爲255,並且在字段中出現BCD溢出。

複製的問題,只是創建列號(19.9)表,並運行SELECT SUM(列名列名 FROM table_name的 GROUP BY 列名

儘管列是NUMBER(19,9),但結果列將是一個沒有精確定義的NUMBER。

在Delphi中,將查詢加載到一個ADOQuery中,DataSetProvider鏈接到它並且一個ClientDataSet鏈接到DataSetProvider。在我調用ClientDataSet.Open之後,在某些機器上,我在NUMBER字段上收到了一條BCD溢出消息,但是在許多機器上它工作的很好。

爲什麼我在這兩臺機器上的midas.dll,ADO,服務器,用戶,oracle客戶機都是相同的,在某些機器上獲得了255的精度?有任何想法嗎?

回答

0

我沒有任何明確的答案,但你肯定你有兩臺機器上的客戶端DLL的相同版本?可能安裝了其他正在干擾的軟件。嘗試在客戶端計算機上運行Windows Process Explorer,並確認您認爲您使用的dll實際上是您的客戶端應用程序正在使用的dll。

+0

我會嘗試使用進程資源管理器。好主意。但我相信,兩臺機器都有相同的客戶端 – Pascal 2009-07-18 04:10:20

1

嘗試類型轉換

Select **CAST(NUMBER_FLD as VARCHAR2(15))** as NUMBER_FLD from DUAL; 

德爾福,是一個StringField(ClientDataSet的)組件,但如果你用別名得到,就像CdsOracleSQL.FieldByname('NUMBER_FLD').AsFloatCdsOracleSQLNUMBER_FLD.AsFloat作品。

我不知道爲什麼BCDField失去小數點分隔符和作品喜歡一個整數...