【发布时间】:2018-12-05 17:12:53
【问题描述】:
带 FireDAC 的 Delphi 10.2 下的 Firebird 2.5:我有一个表,其中包含事件处理程序对象的定义数据,以及从表中加载和存储的那些对象的 TObjectList - 这个表永远不会变得很大,可能是最大值30-40 行,通常只有少数。表的每一行都有一个插入后触发器生成的 PK。我需要能够将对象更新回匹配的表行,并插入任何新条目并在插入后取回生成的 PK 值以保持对象的 ID 匹配。
Firebird 支持的 UPDATE OR INSERT 子句似乎不适合 PK 由插入后触发器生成的情况,但也许我遗漏了一些东西。
那么有没有一种直接的方法来做这种类型的构造?并且考虑到表的小尺寸,是否更有效(如果不完全符合 kosher)只删除表并插入所有新记录?
【问题讨论】:
-
你知道FireDAC event alerts吗?
-
我也有同样的问题。我能够解决它的唯一方法是使用存储过程,该过程在生成密钥后执行插入并返回生成的密钥。
-
Martyn - 不,我不是。感谢您的链接 - 我想我知道如何利用这一点。即将测试它。
-
如果只有您的应用程序使用数据库,另一种方法是设置一个生成器(如果您还没有)来生成您的 pk 并在表的
OnNewRecord事件中自己调用它。 -
PK generated by an after-insert trigger你是怎么做到的?插入后触发器不能像before-insert触发器一样更改列新值