Firebird 触发器不会从应用程序中触发,但会在数据库工具中工作
Firebird triggers do not fire from application but do work in DB tools
我对 Firebird 很陌生 syntax/behavior 所以这可能是个愚蠢的问题。
我 运行 发现 3 个 Firebird(版本 2.5.4)触发器中有 2 个在应该触发时没有从 Delphi 6 应用程序中触发。当从连接到 TIBOQuery 的 DevEx 网格中添加或删除记录时 - 当我检查时记录在数据库中删除 - 但插入后和删除后触发器不会针对 table 触发。确实有效的触发器是插入后或更新后触发器 - 针对不同的 table,但基本上做同样的事情 - 如果此 table 上的值更新,则更新另一个 table列的值。
当我尝试在 SQL Manager Lite 或 EMS for Firebird 中手动添加或删除 table 中的记录时,insert/after 删除后的触发器可以正常触发并按预期运行.所以他们在数据库工具中工作,而不是应用程序。我检查了触发器和 table 的权限并授予所有权限只是为了看看是否是这样,但仍然没有运气。
我可能遗漏了什么会导致触发器在应用程序外但在应用程序内无法正常工作?我知道该应用程序正在使用正确的数据库,因为我可以看到记录得到 added/removed 但触发器没有触发(没有错误 - 但没有发生对其他 table 的预期更新)。
我不是 100% 确定,因为我的触发器按预期工作。您是否设置为在数据感知连接对象中使用自动提交?否则您可能需要提交更改(insert/update 或删除等)才能看到触发器的结果。
检查链接到数据感知组件的对象的设置。有一些与提交-读取提交-写入自动提交等相关的设置
希望我打对了地方。
像大多数奇怪的问题一样,这个问题的答案很简单,但由于对应用程序工作方式的思考过程而被忽略了。更不用说 learning/taking 对新项目和疯狂通勤的厌倦了。无论如何 ;-).
事实证明,触发器实际上是在应用程序中运行,但未刷新的数据感知控件在单击“保存”按钮时将值改回原样。
这是一个带有多个选项卡的表单。 Table A(table 由触发器更新)显示在第一个选项卡中,其字段具有数据感知控件。 Table B(table 上有两个触发器更新 Table A 中的字段)显示在数据感知网格的第二个选项卡中。当该行在网格中为 added/removed 时,它在数据库中被删除 - 但因为 Table A 从未在应用程序中刷新 - 当单击保存按钮时 Table 的旧值在触发器的值上保存了一个字段。
希望这一课对其他人有所帮助。
我对 Firebird 很陌生 syntax/behavior 所以这可能是个愚蠢的问题。
我 运行 发现 3 个 Firebird(版本 2.5.4)触发器中有 2 个在应该触发时没有从 Delphi 6 应用程序中触发。当从连接到 TIBOQuery 的 DevEx 网格中添加或删除记录时 - 当我检查时记录在数据库中删除 - 但插入后和删除后触发器不会针对 table 触发。确实有效的触发器是插入后或更新后触发器 - 针对不同的 table,但基本上做同样的事情 - 如果此 table 上的值更新,则更新另一个 table列的值。
当我尝试在 SQL Manager Lite 或 EMS for Firebird 中手动添加或删除 table 中的记录时,insert/after 删除后的触发器可以正常触发并按预期运行.所以他们在数据库工具中工作,而不是应用程序。我检查了触发器和 table 的权限并授予所有权限只是为了看看是否是这样,但仍然没有运气。
我可能遗漏了什么会导致触发器在应用程序外但在应用程序内无法正常工作?我知道该应用程序正在使用正确的数据库,因为我可以看到记录得到 added/removed 但触发器没有触发(没有错误 - 但没有发生对其他 table 的预期更新)。
我不是 100% 确定,因为我的触发器按预期工作。您是否设置为在数据感知连接对象中使用自动提交?否则您可能需要提交更改(insert/update 或删除等)才能看到触发器的结果。
检查链接到数据感知组件的对象的设置。有一些与提交-读取提交-写入自动提交等相关的设置
希望我打对了地方。
像大多数奇怪的问题一样,这个问题的答案很简单,但由于对应用程序工作方式的思考过程而被忽略了。更不用说 learning/taking 对新项目和疯狂通勤的厌倦了。无论如何 ;-).
事实证明,触发器实际上是在应用程序中运行,但未刷新的数据感知控件在单击“保存”按钮时将值改回原样。
这是一个带有多个选项卡的表单。 Table A(table 由触发器更新)显示在第一个选项卡中,其字段具有数据感知控件。 Table B(table 上有两个触发器更新 Table A 中的字段)显示在数据感知网格的第二个选项卡中。当该行在网格中为 added/removed 时,它在数据库中被删除 - 但因为 Table A 从未在应用程序中刷新 - 当单击保存按钮时 Table 的旧值在触发器的值上保存了一个字段。
希望这一课对其他人有所帮助。