Delphi XE7 - 字段 FTBcd - 数字超出范围
Posted
技术标签:
【中文标题】Delphi XE7 - 字段 FTBcd - 数字超出范围【英文标题】:Delphi XE7 - Field FTBcd - Number is out of Range 【发布时间】: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”
【参考方案1】:
这个问题很旧,但这些天我仍然面临这个问题。我建议确认三个属性。
precision - (必须是有效部分和小数部分)。例如,在数据库中字段是数字(8,4),所以这里正确的值是 12
size - (只是数字的 faccionary 部分)。在我们的示例中,正确的值为 4
DisplayWidth - 这里我们使用精度 + 1 的值作为逗号。
【讨论】:
以上是关于Delphi XE7 - 字段 FTBcd - 数字超出范围的主要内容,如果未能解决你的问题,请参考以下文章