检查Informix 4GL程序更新后是否提交了某些内容

时间:2016-03-14 23:06:53

标签: sql informix 4gl

如果在此更新中实际发生了更改,我必须检查保存我的4GL程序。有时用户只会更新并保存,但实际上没有对表进行更新。

我认为在整个更新期间,它必须执行commit work将更改滚动到表中。

如果确实提交了某些内容,我有什么方法可以在更新结束时查看?要么?还有其他建议吗?

我无法保存previous_data,然后与current_data进行比较,因为在不同的地方有很多代码可以进行更新。

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以在完成后以及执行任何其他SQL操作(例如COMMIT)之前立即检查SQLCA记录中受UPDATE影响的行数。这可能仍然会计算身份'变化',但它最接近你想要的东西。

答案 1 :(得分:0)

我对这个问题的解释是你有类似

的东西
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,然后进行字符串比较来进行比较,因此这些技术也可以使前/后比较成为一个衬里。

否则,如果要在执行数据库语句后进行测试,可能会为您启用触发器。仅当UPDATE中发生了真正的更改时,才创建触发器以将记录插入审计表。