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 - 数字超出范围的主要内容,如果未能解决你的问题,请参考以下文章

delphi7和最新版的XE7差别大不大

Delphi xe7并行编程快速入门(三篇)

现在的delphi xe7写的程序还能被反编译吗

delphi 升级到xe7后的一些个人经验

Delphi xe7 up1 调用android振动功能

Delphi xe7并行编程快速入门(转)