• ベストアンサー

access beforeupdateにおいて

Accessのフォームを作成し、データを入力する際にでbeforeupdateを用いて、どのフィールドにデータが入力されたのかを判断し、データが入力(更新)された際に日付(更新日付)の部分を自動更新したいのですが、ご存知の方ご教授ください。

質問者が選んだベストアンサー

  • ベストアンサー
  • yukima
  • ベストアンサー率70% (7/10)
回答No.1

(1)作成日時、最終更新日時の2つのフィールドを日付型で準備します。 (2)フォーム作成時に作成日時、フォームが更新されたとき(フィールドに更新された時)に最終更新日時のフィールドに更新された日時(そのときの時間)を入れる方法をとります。 (3)フォームレベルのイベントで処理します。 具体的には 作成日時のデータはフォームレベルのイベントの フォームの挿入前のイベントで入れるか、 (もしくはフィールドの既定値で定義しても可能と思われる) Private Sub Form_BerForeInsert(Cancel As Integer)    Me![作成日時] = Now() ’←作成日の場合は Date   ’Me![作成者] = CurrentUser() ’←作成者を入れる場合 End Sub また、最終更新日についても、フォームレベルのイベントで フォームの中のあるフィールドが更新されると言うのは、 フォーム全体も更新されたという事ですので”フォームのBeforeUpdate” にコードを書きます。 この方法であると、どのフィールドにデータが入力されたのかを判断する必要はないと思われます。 Private Sub Form_BeforeUpdate(Cancel As Integer)    Me![最終更新日時] = Now() ’←作成日の場合は Date   ’Me![最終更新者] = CurrentUser()’←作成者を入れる場合 End Sub フィールドのBeForeUpdateでなく、”フォームのBeForeUpdate”というのが鍵です。 以上どうでしょうか?

diojojo
質問者

補足

回答ありがとうございます。詳しい説明で分かりやすいです。 実際はフォームの中にたくさん存在するレコードはクエリーを元にフォームを作っています。そしてそのクエリーもいくつかのテーブルをもとに作成しています。 こういう場合も上記の(3)のようにすればレコードにデータが更新された場合 日時が自動で挿入されるのでしょうか?

その他の回答 (1)

  • yukima
  • ベストアンサー率70% (7/10)
回答No.2

>実際はフォームの中にたくさん存在するレコードは >クエリーを元にフォームを作っています。 >そしてそのクエリーもいくつかのテーブルをもとに作成しています。 >こういう場合も上記の(3)のようにすればレコード >にデータが更新された場合日時が自動で挿入されるのでしょうか? 複数のテーブルという事は、簡単な見積書作成DBの例で説明いたします。 このDBは以下の4つのテーブルで構成されるとします。 (1)見積書(見積書ID、顧客ID【(3)から引張ってくる】、作成日、作成者) (2)見積書明細(商品ID【(4)から引張ってくる】、個数) (3)顧客マスター(顧客ID、顧客名、顧客住所等・・) (4)商品マスター(商品ID、品名、単価、商品情報等・・・) 見積書自身の最終更新を管理する場合には(1)のテーブルに作成日、更新日のフィールドを追加してこのフィールドに値が入るようにすれば良いと思います。 (わたくし個人的には”diojojo”さんはこの場合だと思うのですが・・・) また顧客マスター、初品マスターの最終変更日を入れたい場合はこちらのテーブルに作成日、更新日のフィールドを追加すれば良いと思います。 どのテーブルに最終更新日を記載したいのかを明確にして、 最終更新日を記載したいテーブルにフィールドを追加するのが ポイントと思われます。 以上判りましたでしょうか? (言葉での説明は非常に難しいと痛感します、サンプルでは一目瞭然なのですが・・・・・・・)

関連するQ&A