我对Firebird的语法/行为很生疏,所以这可能是一个愚蠢的问题。
我遇到的是3个Firebird(版本2.5.4)中的2个触发器在它们应该的时候不会从Delphi 6应用程序触发。当从连接到TIBOQuery的DevEx网格中添加或删除记录时 - 当我检查时,数据库中的记录被删除 - 但是后插入和删除后的触发器没有针对该表触发。有效的触发器是After Insert或Update触发器 - 并且针对不同的表,但基本上做同样的事情 - 如果更新此表上的值,则更新另一个表列的值。
当我尝试在SQL Manager Lite或EMS for Firebird中手动添加或删除表中的记录时 - 插入/删除后触发器触发正常并按预期运行。所以他们在数据库工具中工作,但不在应用程序中工作。我检查了触发器和表的权限,并授予所有权限只是为了查看是否是它但仍然没有运气。
我可能会遗漏哪些会导致触发器在应用程序外部正常工作但不在其中?我知道应用程序正在使用正确的数据库,因为我可以看到记录被添加/删除但没有触发器触发(没有错误 - 但不会发生对其他表的预期更新)。
答案 0 :(得分:1)
与大多数奇怪的问题一样,由于应用程序工作原理的思考过程,这个答案很容易被忽略。更不用说学习/接受新项目和疯狂通勤的厌倦。无论如何; - )。
事实证明触发器实际上是从应用程序工作,但是一个未刷新的数据感知控件在单击“保存”按钮时更改了值。
这是一个包含多个标签的表单。表A(由触发器更新的表)显示在第一个选项卡中,其中包含数据感知控件的字段。表B(在表A中有两个触发器,用于更新表中字段的表)显示在数据感知网格的第二个选项卡中。当在网格中添加/删除行时,它在DB-中被删除,但因为表A从未在应用程序中刷新 - 当单击“保存”按钮时,表A字段的旧值保存在触发器的值上。
希望这一课能帮助别人。
答案 1 :(得分:0)
我不是百分百肯定,因为我的触发器按预期工作。您是否设置为在数据感知连接对象中使用自动提交?否则,您可能需要提交更改(插入/更新或删除等)才能看到触发器的结果。
检查链接到数据感知组件的对象的设置。有一些与commit-read commit-write auto commititting等相关的设置。
我希望我能够进入正确的区域。