【发布时间】:2012-08-17 15:45:45
【问题描述】:
我有一个 Delphi XE 应用程序,它使用 TClientDataSet 和 TDataSetProvider 以及后面的 TADOQuery 访问 Oracle XE 数据库。
我要写入的表有一个NUMBER(19) 字段。
我正在向其中写入一个值,如下所示:
myDataModule.myClientDataSet.FieldByName('ID').AsLargeInt := ID;
假设我有一个像 1234567890123456789 这样的 ID,它会四舍五入为 1234567890123460000。
我怎样才能避免这种情况?
【问题讨论】:
-
你能检查一下 myDataModule.myClientDataSet.FieldByName('ID').DataType 吗?
-
这给了我“不可用的值”,尽管单步执行 DB.pas 代码表明它被错误地识别为 TFloatField。为作业显式转换字段无济于事。所以我需要找出如何像 Arnaud 所说的那样强制创建 ftLargeint。
-
尝试将
TADOQuery.EnableBCD设置为True。 -
这样做会返回一个 EVariantOverflowError "'在将类型(十进制)的变体转换为类型(货币)时溢出。"
-
那就考虑迁移到3d方Delphi Oracle数据访问组件。