我遇到了 Delphi 6 + Oracle 10gR2 + ADO + ClientDataSet 的问题。
每当我在字段 NUMBER(19,9) 上运行聚合函数时,生成的列都会向 Delphi 返回一个 NUMBER 数据类型,在某些机器上它加载为精度为 38 的 TBCDField,一切顺利,但在某些机器上它加载为精度为 255 的 TBCDField,并且我在该字段上得到 BCD 溢出。
要复制该问题,只需创建一个包含 NUMBER (19,9) 列的表,然后运行 SELECT SUM( column_name ) column_name FROM table_name GROUP BY column_name。
尽管该列是 NUMBER(19,9),但结果列将是一个未定义精度的 NUMBER。
在 Delphi 中,将查询加载到 ADOQuery 中,DataSetProvider 链接到它,ClientDataSet 链接到 DataSetProvider。在我调用 ClientDataSet.Open 后,在某些机器上,我在 NUMBER 字段上收到 BCD 溢出消息,但在很多机器上它工作得很好。
当 midas.dll、ADO、服务器、用户、oracle 客户端在两台机器上都相同时,为什么我在某些机器上得到了 255 精度?有任何想法吗?