在 AutoInc 字段中将 AnyDAC 应用程序迁移到 FireDAC 失败

Posted

技术标签:

【中文标题】在 AutoInc 字段中将 AnyDAC 应用程序迁移到 FireDAC 失败【英文标题】:Migrating an AnyDAC app to FireDAC fails on the AutoInc fields 【发布时间】:2021-03-10 16:06:57 【问题描述】:

我已将 AnyDAC 应用程序迁移到 FireDAC,但无法使用其 Autoinc 字段。

ID 字段(主键)已在 Postgre SQL 上定义为默认为 nextval('llistapanelspuzzle_id_seq'::regclass),BIGSERIAL,因此服务器会自动设置其值。

AnyDAC 将该列识别为 TAutoincField 并且工作正常,但是当我现在在 FireDAC 上打开该表时,它无法说找到的字段是 TLargeIntField。我将持久性字段更改为 TLargeIntField,但是现在在 Delphi 上插入记录时,我没有从服务器获取新值,它使数据集的值为 0,当我添加第二条记录时,它会引发 @987654326 @(主键值为 0 的两条记录)。

当 AutoInc 字段被识别为 LargeInt 字段时,您知道如何在 FireDAC - PostgreSQL 上定义 AutoInc 字段吗?

更新:我已将 ID 添加到 UpdateOptions.AutoIncFields,但它似乎没有任何改变。

谢谢。

【问题讨论】:

嗨,马克。我自己不是 PostGreSQL 用户,但您查看过 this page 吗? 如何插入记录?我猜你没有使用明确的INSERT SQL 查询? 嗨@MartynA。是的,谢谢,当我更新帖子说我尝试将该列添加到UpdateOptions.AutoIncFields 时,这就是我正在阅读的内容。我想我错过了一步,所以我会继续尝试Manual Specifiying 部分。 嗨@Olivier 不,我有一个带有 SELECT * FROM MyTABLE 的 TFDQuery,我在其中执行了几个 MyQuery.Apend 和 MyQuery.Post。 尝试使用 查询字段编辑器 重新创建持久字段,至少是 autoinc 字段 【参考方案1】:

看来您必须激活 FDConnection 上的 ExtendedMetada flag 才能让 FireDAC 自动识别 PostgreSQL Autoinc 列。

现在它可以正常工作了。

【讨论】:

以上是关于在 AutoInc 字段中将 AnyDAC 应用程序迁移到 FireDAC 失败的主要内容,如果未能解决你的问题,请参考以下文章

AnyDAC - 编辑前刷新记录

AnyDAC (FireDAC) - 在 TBlobField.GetAsString 之后打开事务

德尔福火鸟汽车

AnyDac - 如何断开与内存中的 sqlite db 的连接?

从 Anydac 移动到 Firedac 时 NULL 丢失

Anydac TADTable 组件排序问题