Delphi FireDAC,获取数据库默认值

问题描述 投票:0回答:1

我正在将使用最新 Advantage Database Server (ADS) 的 Delphi XE8 编写的应用程序迁移到 Delphi 12.2 Enterprise,但目前仍使用 ADS。 数据库表配置了字段默认值、约束、二级索引……当然,它在当时使用 XE8 ADS 组件可以完美地工作。

在 FireDAC 应用程序中,添加新记录时,使用 FDTable 或 FDQuery 不会显示这些默认值。 我想可能是因为 ADS,所以我创建了一个 ADO MSAccess 测试应用程序,但它的行为是一样的。 我有一些带有默认文本值的字段。我可以添加一条记录,然后发布,然后刷新,然后会出现默认值。

那么,FireDac 可以通过正确的 Fetch 或其他设置/选项检索 OnNewRecord 的默认值吗?

谢谢,

马克

delphi ads firedac delphi-xe8 delphi-12-athens
1个回答
0
投票

从您的问题描述中并不清楚您的应用程序是如何工作的。 我不熟悉 ADS,但我经常将 FireDAC 与其他数据库一起使用。

数据库定义为新创建的记录中的列提供默认值,其中

INSERT
语句中未指定值。 因此,如果在
INSERT
语句中指定了值,则默认值将不适用,而是您将获得 INSERT 语句中提供的值。

您可以使用内置监控检查 FireDAC 实际写入的内容。 设置一个监控组件,并在您的

TFDConnection
上设置监控即可使用它。 然后您将能够看到实际写入数据库的内容。 Delphi 提供了一个监控应用程序,可以让您在监控应用程序窗口中实时查看活动。

根据您的描述,很难知道您的应用程序需要做什么而它没有做什么。 不知道您实际上是如何构建您的

INSERT
语句(“使用 FireDAC”不是这里的答案,您是否使用您自己填充的
TFDCommand
,或者您是否使用其他东西为您构建它,例如
TFDMemTable
)很难提供建议。

但是,如果您使用

INSERT
语句通过
TFDCommand
创建记录,则未在语句中设置的任何列都将具有列定义中的默认值。

这就是您期望系统如何工作的方式,您可能会期望其他东西,因为您习惯了使用不同的组件。

© www.soinside.com 2019 - 2024. All rights reserved.