#559 | データの変更前後の値をログ出力する方法 | フォーム、VBA | |
フォームでデータが変更されたとき、その変更前と変更後の値をログ用のテーブルに出力する方法です。
ここでは、「OldValue」プロパティによって変更前の値を、また「Value」プロパティ(コード上は省略しています)によって変更後の値を取得しています。 「OldValue」には、そのレコードを編集し始める前の値、すなわち前回レコードが保存されたときの値が格納されています。また「Value」には最終的にレコード保存される値が格納されています。したがって、フォームの更新前処理イベントを使っていることもありますが、レコード編集中に何度データを書き換えても、その途中経過まではログに出力されません。あくまでもレコード単位の編集前後の値がログ出力されるだけです。 なお、このような処理は「AfterUpdate/更新後処理」イベントでも良さそうですが、更新後のタイミングでは「OldValue」の値が「Value」の値で置き換えられてしまいます。つまり両者が同じ値になってしまい、もはや変更前の値を取得できません。 また、結果的には変更前と変更後が同じ値であったとしても、一時的に何らかの変更を加えることで更新前処理イベントが発生するため、前後が同じ値としてログに保存されます。そのような場合は保存しないようにするには、事前に「OldValue」と「Value」を比べ、違いがあったときだけログ出力を実行するような分岐処理を加える必要があります。 実行例:
※ここでは2つのフィールドのみをログの対象としていますが、このプログラムを応用すればいくつでもログ出力させることができます。 ※また、Now関数やテーブルの既定値プロパティを使って「変更日時」を保存したり、何らかの方法(ログイン画面を用意したりネットワークユーザー名を取得したりするなど)でユーザー名を取得して「変更者」を保存したりすることもできます。 参考Tips:「#531 レコードの更新ログをとる例」 |
|||
|
Copyright © T'sWare All rights reserved |