【问题标题】:Delphi FireDAC TFDQuery DisplayFormatDelphi FireDAC TFDQuery 显示格式
【发布时间】:2016-08-17 13:42:17
【问题描述】:

我有一些与FormatOptions 相关的问题。 我有一个销售屏幕,在迁移到 Firedac(以前是 IBO)后,完整值(例如:100.00、52.00)开始显示如下:

(国际文凭组织) 100.00 52.00

(FireDAC) 100 52

我尝试通过以下配置使用MapRules:

SourceDataType dtBCD
TagetDataType dtBCD
PrecMax 18
PrecMin 1
ScaleMax 5
ScaleMin 0

我激活了OwnMapRules 选项,但显示保持不变。所以我尝试使用fmtDisplayNumeric property。通知 ',0.00' 部分解决了我的问题,为什么将显示限制为两位小数,但有些字段的小数位超过 2 位。此外,我的整数字段在显示屏上显示小数位。

我尝试在 MapRules 中为 Integer 字段创建规则,但问题仍然存在。

遇到这种情况我该怎么办?

提前致谢!

【问题讨论】:

  • 你用什么来显示这个? TFDQuery 是一个非可视组件。
  • @JerryDodge 我在 DBGrid 和 DBEdit 中显示
  • 通常显示应该在 UI 级别实现。意思是,如果您在TDBGrid 和TDBEdit 中显示数据,那么显示格式应该在那里完成。基础数据不应受到影响。
  • 我无法在 DBGrid 或 DBEdit 中格式化我的字段,我总是在 Query AfterOpen event 上使用 TNumericField(Query.FieldByName('Field')).DisplayFormat := ',0.00' 应用格式。但我知道Firedac 有另一个名为MapRules 的系统。
  • @JerryDodge:我不确定我是否同意应该在哪里进行显示格式化,尤其是。如果相同的数据要由两个不同的控件显示。使用 TField OnGetText 事件有什么问题?当然,这种类型的东西是它的目的。

标签: delphi firedac displayformat


【解决方案1】:

MapRules 与显示格式无关。它将驱动程序数据类型转换为您要在应用程序中使用的数据类型,反之亦然。

IBO 组件对数字字段有特定的行为。他们将其视为货币字段,具体取决于数字比例。见IBO documentation。

默认情况下,Firedac 使用区域设置来格式化输出。您可以在 this paper 中阅读如何更改此行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多