2016-03-14 5 views
0

Мне нужно проверить сохранность моей программы 4GL, если в этом обновлении были внесены изменения. Иногда пользователи будут просто обновлять и сохранять, но никаких изменений в таблицах не было.Проверьте, что что-то произошло после обновления в программе Informix 4GL

Я бы предположил, что на протяжении всего обновления он должен сделать commit work, чтобы свернуть изменения в таблицу.

Есть ли способ проверить в конце обновления, если что-то действительно произошло? Или? Любые другие предложения?

Я не могу сэкономить previous_data, а затем сравнить с current_data, так как существует очень много кода в разных местах, где могут быть сделаны обновления.

Спасибо!

ответ

0

Вы можете проверить запись SQLCA для количества строк, затронутых UPDATE, сразу после ее завершения и перед выполнением любой другой операции SQL (например, COMMIT). Это может по-прежнему считать идентичные «изменения», но это самое близкое приближение к тому, что вы хотите, которое доступно.

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 произошло подлинное изменение.