【发布时间】:2015-10-20 16:27:48
【问题描述】:
我正在将一个应用程序从 Delphi 2010 迁移到 Delphi XE7,它使用一些带有 BDE 的旧 Paradox Table。我有一些字段形成 BCD (#) Size 4,在 Delphi 2010 中被管理为.asfloat
例子
TABELLA1.Fieldbyname('FIELDBCD').AsFloat: = TABELLA2.Fieldbyname('Number').AsFloat;
没有任何问题。
在转换后的程序中,任何类型的赋值都会导致错误信号 EDBEngineError Number is out of range.... 这即使我只是简单地从 DBGrid 中对值进行数字化。
你知道 Delphi XE7 中 BCD 字段管理的 BUG 还是他们管理方式不同?
谢谢 米尔科
【问题讨论】:
-
改用
TField.AsBCD。 -
我说过“即使我只是简单地从 DBGrid 中数字化值”。该问题与分配的类型无关。任何类型的赋值都会出错。我有 2 台带有 delphi xe7 的 PC,并且都遇到了同样的问题。我使用了任何类型的赋值(也是 .asbcd)但没有结果。
-
你是对的。这是因为底层价值的类型,这就是为什么你应该使用
TField.AsBCD而不是我所说的。请发布包含足够信息的 MCVE,以便我们重现问题,包括 Paradox 表定义和实际的可编译代码。 -
取一个 DBGrid,取一个 TTable 和一个 TDatasource。连接它们。使用 BDE 别名将 TTable 连接到 Paradox 表。悖论表有一个 BCD 字段就足够了。通过 DBGrid 修改表的 BCD 字段,在 Post 上报错“EDBEngineError Number is out of range”
标签: delphi delphi-xe7 tbcd