• ベストアンサー

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

  • アクセスで日付(期間)抽出

    アクセスでわからないことがあるので教えて下さい。 アクセス2003を使用しています。 フィールド名  日付    名前  代金        2001/10/14  田中  4000        2001/04/05  鈴木  1000 とデータが100件ほど入っています。 この日付でたとえば、4月5日~9月15日までの データだけを抽出したい場合どうすればいいでしょうか? 抽出はできれば、入力フォームを作成して 入力フォームから日付を入れれば、抽出する形をとりたいんです。 お願いいたします。

  • アクセスのデータ入力について

    教えてください。 アクセスのフォームでデータ入力をする際に、同じフィールドに同じデータを何回も連続して入力する場合があります。 たとえば、「日付」であるとか「勘定科目」あるいは「摘要」などです。 いちいち入力するのは面倒なので、たとえば「Enter」を押すと、前回、同じフィールドに入力したデータを表示してくれるようなプロシージャは作れないものでしょうか?? よろしくお願いします!

  • アクセス チェックボックス入力日付表示方法

    アクセス初心者で悩んでいます。 いまアクセスフォームでデータ表を作成しているのですが、その中でチェック欄があり、その欄のチェックを押した日付を別フィールドに表示させるため手動で入力を行い、それをクエリに反映させていました。これをVBAか何かでチェック欄をつけたら現在日付を自動で表示させれないでしょうか?

  • ACCESS 互換性の問題でしょうか?

    お世話になります。 ACCESS2003(OSはXP)でデータを作成しました。(ACCESS2000ファイル形式)そして、ACCESS2000(OSはWIN98)で使おうとしたんですが、不正な処理というメッセージがでて、ACESS自体が閉じてしまいます。そこで、再度ACCESS2003で使ってみたところ普通に動くようです。 詳しくは、社員リストをテーブルで作成。クエリでフォーム入力用に修正。フォーム作成してデータ入力。といった形で作成しました。 テーブルで入力する分には普通に動くのですが、クエリ・フォームで入力するとウインドウが閉じてしまいます。また、氏名、シメイ、誕生日等 フィールドに入力するとウインドウが閉じますが、同じテーブルであるメモというフィールドは入力しても閉じません。 いろいろリレーションシップやカナ自動入力等触ってみたのですが、うまくいきません。やはり、OSかACCESSのバージョンの互換性がうまくいっていないからでしょうか? うまく、説明できなくてすみませんが、よろしくお願いします。

  • 助けてaccess!

    アクセスで顧客データを作っています。 クエリ上のデータとテーブルのデータ(サブフォームで)を引っ張り、「入力フォーム」を作成したのですが、新規情報を入れようとすると、「フィールドを更新できません」とエラーが出ます。しかしEnter Keyを3回たたく(このエラーが3回でる)となぜか入力ができるようになります。そしてその後保存もできます。 この現象はなぜ出るのでしょうか?そして解決方法をどなたか教えてください。よろしくお願いします。

  • アクセス作成について

     アクセスについて質問します。  フォームで入力する場合で、例えばテーブルのレコードを100までとし、101を超えた場合またレコード1にデータを入力することは可能でしょうか。 テーブル フィールド1 フィールド2  1       6  2       8   .      .   .      . 100       55 フィールド1は固定し、フィールド2にデータを入力していき101番目にデータを入力する時はまた1行目の6を上書きしてデータを更新していくようなことは可能でしょうか。(もちろんフィールド1、フィールド2を別テーブルとしクエリーを活用することでもok) アクセス初心者です。よろしくおねがいします。

  • access2003で生年月日から年度初めの年齢を算出したいのですが…

    Access2003で名簿を作成中です。 やりたいことは以下の2つです。 1.クエリで、"生年月日"フィールドから年度初め(2010/4/1現在)の年齢を自動的に"年齢"フィールドに表示させたい 2.上記のクエリをもとに、新規入力用のフォームをつくり、やはり生年月日を入れたら自動的に年度初めの年齢が出るようにしたい。 これに必要な設定や記述を教えてください。 ちなみにクエリのもとにしているテーブルの"生年月日"フィールドのデータ型は「日付/時刻型」にし、書式は「日付(S)」にしています。 よろしくお願いします。

  • accessの時間更新方法(フォーム)

    access超初心者なので教えてください。 access2002を使用しています。 accessでフォームを作成しました。 フォーム内には、簡単な日付、時間、メモ的なフォーム欄があり、 日付と時間はオートで付与され、テーブル内で規定値に 日付:=Date() 時間:=Now() を設定しています。 上記2つは別々のフォーム欄に分ける必要があるんです。 そして、新規作成ボタンを作り、クリックすることで、 入力したデータはテーブルに保存されます。 ここで質問なんですが、新規作成ボタンをクリックすることで、 今まで入力していたものはテーブルに格納され、新しい日付と時間 がオートで日付と時間のフォーム欄に表示されるのですが、 この表示された日付、時間をより新しい情報に更新するにはどうしたら いいのでしょうか? 分かりづらくてすみません。 例を出します。 日付:2008/05/09 時間:13:55 メモ:テスト 上記を各フォームに入力し、新規作成ボタンを押します。 ↓ 上記情報がテーブルに格納されます。 ↓ 新しい日付と時間が表示され、メモ欄は空白の 新しいフォームが現れます。 日付:2008/05/09 時間:13:56 メモ:(入力待ち状態) この時、新規作成ボタンを再度クリックしても、時間が更新されず、 テーブルにも格納されません。 テーブルに格納されないのはいいことなんですが、時間が更新されない のは困るんです。。。 新規作成ボタンを押すごとに、時間が更新されているようにするにはどうしたら いいのでしょうか? (新規作成ボタン以外に新たに時間更新用のボタンを作ることも対処の視野に入れます)

  • Access2003の日付と印刷

    Access2003を3日前に初めて個人情報を管理するデータを作成しているのですが、 日付を2003/12/01と入力したら次の欄に自動的に2004/11/30と一年後の日付を出力するにはどうすればよいでしょうか? あとフォームでレコードを検索し、表示されたレコードのページ(1ページ)のみを印刷したいのですが、 フォームに印刷タブを作成しクリックするとレポートで作成した印刷プレビューにとぶまでは作成できたのですが、 レコードに入力したデータ前ページすべてが印刷されてしまいます。 選択したレコードのみを印刷するにはどうすればいいでしょうか? 始めたばかりの初心者でくだらない質問かもしれませんが、どなたかご教授お願いします。

  • oracle8に接続、Access97での質問

    oracleのテーブルのフィールドには日付がありまして、このフィールドにはデータとして200010と入っています。これをAccess97のフォーム上で読み込んだときは2000/10という風に表示させたいのですがどうすればいいのですか?反対にAccess97のフォーム上に2000/10(定型入力で9999\/99;0、書式でyyyy/mm)と入力して登録ボタンをクリックしたときolacleのテーブルに200010という風にデータを格納したいのですがどうか教えてください。よろしくお願いします。

専門家に質問してみよう