在 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 (FireDAC) - 在 TBlobField.GetAsString 之后打开事务
AnyDac - 如何断开与内存中的 sqlite db 的连接?