使用 FireDac TFDCommand 对 autoinc 字段执行插入操作并检索生成的值

Posted

技术标签:

【中文标题】使用 FireDac TFDCommand 对 autoinc 字段执行插入操作并检索生成的值【英文标题】:Executing insert operation with autoinc fields with FireDac TFDCommand and retieving generated values 【发布时间】:2015-01-26 02:42:38 【问题描述】:

我正在尝试在具有 autoinc 字段的表中执行插入操作,为此我正在使用 FireDac TFDCommand。因此,记录已成功插入到 db 中,但是如何获取 autoinc 字段的生成值?

Obs:TFDConnection 让我得到最后一个自动生成器。值,但该表会生成两个 autoinc 字段。我可以获取主键并选择 db 中的记录,但这将是对 db 的另一个调用,我需要阻止它。

有什么想法吗?

【问题讨论】:

这两个字段已填写,但我需要这两个字段的生成值。当我使用 TFDCommand 并调用 executesql 时,没有返回记录集。那么如何获得这些值呢? 您使用的是哪个数据库引擎?有些数据库有非标准的 SQL 扩展,允许你在语句执行后获取一些字段值。 【参考方案1】:

唯一的方法似乎是在插入发生后解析TFDConnection.Messages 属性。一些 DBMS,如 SQL Server,将消息作为附加结果集返回。

要启用消息处理,请将ResourceOptions.ServerOutput 设置为True

如果来自您使用的数据库服务器的消息没有返回任何最后插入的密钥信息,我担心唯一的解决方案是另一个查询来检索最后一个 ID ...

【讨论】:

这就是我害怕的,做一个新的查询只是为了得到那个值。考虑使用datasnap,查询并选择记录(打开数据集)并包含新记录并不是一个好主意。所以,我看到的最好的方法是进行 sql 操作,如插入、更新......不需要从数据库中选择记录来插入一个新记录,也不要将它们保存在内存中。也许我的概念是错误的,但在性能操作上我认为这是最好的解决方案。

以上是关于使用 FireDac TFDCommand 对 autoinc 字段执行插入操作并检索生成的值的主要内容,如果未能解决你的问题,请参考以下文章

FIREDAC的TFDJSONDataSets和TFDJSONDeltas查询和提交数据

论DATASNAP结合FIREDAC的使用方法

FIREDAC记录SQL日志

(FireDAC) 连接定义

FireDAC 下的批量 SQL 命令执行

FireDAC 下的批量 SQL 命令执行