プロが教えるわが家の防犯対策術!

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

A 回答 (2件)

>実際はフォームの中にたくさん存在するレコードは


>クエリーを元にフォームを作っています。
>そしてそのクエリーもいくつかのテーブルをもとに作成しています。
>こういう場合も上記の(3)のようにすればレコード
>にデータが更新された場合日時が自動で挿入されるのでしょうか?

複数のテーブルという事は、簡単な見積書作成DBの例で説明いたします。

このDBは以下の4つのテーブルで構成されるとします。
(1)見積書(見積書ID、顧客ID【(3)から引張ってくる】、作成日、作成者)
(2)見積書明細(商品ID【(4)から引張ってくる】、個数)
(3)顧客マスター(顧客ID、顧客名、顧客住所等・・)
(4)商品マスター(商品ID、品名、単価、商品情報等・・・)

見積書自身の最終更新を管理する場合には(1)のテーブルに作成日、更新日のフィールドを追加してこのフィールドに値が入るようにすれば良いと思います。
(わたくし個人的には”diojojo”さんはこの場合だと思うのですが・・・)

また顧客マスター、初品マスターの最終変更日を入れたい場合はこちらのテーブルに作成日、更新日のフィールドを追加すれば良いと思います。

どのテーブルに最終更新日を記載したいのかを明確にして、
最終更新日を記載したいテーブルにフィールドを追加するのが
ポイントと思われます。

以上判りましたでしょうか?

(言葉での説明は非常に難しいと痛感します、サンプルでは一目瞭然なのですが・・・・・・・)
    • good
    • 0

(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”というのが鍵です。
以上どうでしょうか?

この回答への補足

回答ありがとうございます。詳しい説明で分かりやすいです。

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

補足日時:2001/07/17 23:49
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!