检查 Informix 4GL 程序更新后是否提交了某些内容
Check if something got committed after an update in Informix 4GL program
我必须在保存我的 4GL 程序时检查此更新中是否确实进行了更改。有时用户只会更新并保存,但实际上没有对 table 进行更新。
我假设在整个更新过程中它必须执行 commit work
以将更改滚动到 table。
有什么方法可以让我在更新结束时检查是否确实提交了某些内容?要么?还有其他建议吗?
我无法保存 previous_data
然后与 current_data
进行比较,因为在不同的地方有太多代码可以完成更新。
谢谢!
您可以在更新完成后立即检查 SQLCA 记录以了解受更新影响的行数,然后再执行任何其他 SQL 操作(例如提交)。这可能仍然算作身份 'changes',但它最接近您想要的可用内容。
我对这个问题的解释是你有类似的东西
INPUT ...
...
END INPUT
IF int_flag THEN
# Don't update database
ELSE
# Update database
END IF
如果用户接受对话框,将执行更新数据库的代码。如果用户没有对 INPUT 进行任何更改,那么这可能被认为是浪费时间。
我知道在 Genero 中,我们添加了语法,以便您可以更好地检测对话框中发生的更改,从而仅在发生更改时更新数据库。 http://www.4js.com/online_documentation/fjs-fgl-manual-html/#c_fgl_prog_dialogs_touched_flag.html
如果仍在使用旧的 4gl,field_touched 应该可供您使用。我知道我们可以做到
AFTER INPUT
IF int_flag THEN
EXIT INPUT
END IF
IF field_touched(*) THEN
# User has made a change in the dialog
并且通过使用 * 测试对话框中的所有字段而不必明确列出它们,您可能必须明确列出字段。因此,在对话之后进行测试可能比您想象的要简单。
类似地,对于具有记录和数组的复杂数据结构,在 Genero 中我们可以通过解析为 JSON 或 XML,然后再解析为字符串来进行比较,因此这些技术也可以使 before/after 对比一衬里。
否则,如果您想在数据库语句执行后进行测试,触发器可能是您的一个选择。创建触发器以将记录插入审计 table 仅当 UPDATE 中发生真正的更改时。
我必须在保存我的 4GL 程序时检查此更新中是否确实进行了更改。有时用户只会更新并保存,但实际上没有对 table 进行更新。
我假设在整个更新过程中它必须执行 commit work
以将更改滚动到 table。
有什么方法可以让我在更新结束时检查是否确实提交了某些内容?要么?还有其他建议吗?
我无法保存 previous_data
然后与 current_data
进行比较,因为在不同的地方有太多代码可以完成更新。
谢谢!
您可以在更新完成后立即检查 SQLCA 记录以了解受更新影响的行数,然后再执行任何其他 SQL 操作(例如提交)。这可能仍然算作身份 'changes',但它最接近您想要的可用内容。
我对这个问题的解释是你有类似的东西
INPUT ...
...
END INPUT
IF int_flag THEN
# Don't update database
ELSE
# Update database
END IF
如果用户接受对话框,将执行更新数据库的代码。如果用户没有对 INPUT 进行任何更改,那么这可能被认为是浪费时间。
我知道在 Genero 中,我们添加了语法,以便您可以更好地检测对话框中发生的更改,从而仅在发生更改时更新数据库。 http://www.4js.com/online_documentation/fjs-fgl-manual-html/#c_fgl_prog_dialogs_touched_flag.html
如果仍在使用旧的 4gl,field_touched 应该可供您使用。我知道我们可以做到
AFTER INPUT
IF int_flag THEN
EXIT INPUT
END IF
IF field_touched(*) THEN
# User has made a change in the dialog
并且通过使用 * 测试对话框中的所有字段而不必明确列出它们,您可能必须明确列出字段。因此,在对话之后进行测试可能比您想象的要简单。
类似地,对于具有记录和数组的复杂数据结构,在 Genero 中我们可以通过解析为 JSON 或 XML,然后再解析为字符串来进行比较,因此这些技术也可以使 before/after 对比一衬里。
否则,如果您想在数据库语句执行后进行测试,触发器可能是您的一个选择。创建触发器以将记录插入审计 table 仅当 UPDATE 中发生真正的更改时。