追加クエリを使用して、テーブルに変更履歴を残す方法です。
履歴テーブルを作成して、単票フォームの更新日のテキストボックスに更新日を取得するマクロを作成します。
そして、追加クエリを作成し、単票フォームの更新後処理にマクロビルダーで設定します。
参考ここでは、ウィンドウの表示は[ウィンドウを重ねて表示する]の設定にしています。
-
[タブ付きドキュメント]と[ウィンドウを重ねて表示する]の違い
Access2007以降、オブジェクトを表示すると、タブ付きウィンドウで表示されるようになっています。 昔からAccessを使用している方に ...
テーブルのデータマクロを使用した更新記録テーブルの作成方法は、以下の記事で解説しています。フォーム以外での更新も履歴として保存できます。
Access2010以降であれば、データマクロのほうが簡単かもしれません。
-
更新日時を指定テーブルやフィールドへ自動で保存するデータマクロ
Accessのテーブルのデータを処理するためのマクロのことを[データマクロ]と呼びます。 テーブルで行った削除や追加、更新などの実行時に、設 ...
この記事の目次
テーブルの確認
[T_売上]テーブルは、下のようになっています。
[T_売上]テーブルのデザインビューです。[ID]が主キーとなっています。
参考[主キー]の設定については、以下の記事で解説しています。
-
Accessテーブルの[主キー]の設定
Accessのテーブルでは、[主キー](シュキー)を設定することができます。[主キー]とは、各レコードを固有のものとして識別するフィールドの ...
売上履歴テーブルの作成
この[T_売上]テーブルをコピーして、[T_売上の履歴]テーブルを作成します。
テーブルの構造のみをコピー
[T_売上]テーブルをコピーします。
[T_売上]テーブルで右クリックして、ショートカットメニューから[コピー]をクリックします。
そして、ナビゲーションウィンドウで右クリックして[貼り付け]をクリックします。
すると、以下の[テーブルの貼り付け]ダイアログボックスが表示されますので、[テーブル構造のみ]を選択します。
名前は[T_売上の履歴]とします。[OK]ボタンをクリックして閉じます。
ナビゲーションウィンドウに[T_売上の履歴]テーブルが作成されます。データは空っぽです。
[T_売上の履歴]テーブルをデザインビューで開きます。
[ID]の主キーは削除して、重複のレコードが保存できるようにします。
参考オブジェクトをコピーして活用する方法については、以下の記事で解説しています。
-
テーブル・クエリなどのオブジェクトをコピーして活用する
Accessの1つのデータベース内でテーブルやクエリ、フォーム、レポートなどのオブジェクトをコピーする方法です。 コピーボタンや貼り付けボタ ...
帳票フォームと単票フォーム
[F_帳票]フォームの[開く]ボタンをクリックすると[F_単票]フォームが開くように設定しています。
これについては、以下の記事を参照してください。
-
帳票フォームのボタンをクリックして同じIDの単票フォームを起動する
Accessで、帳票フォームから同じIDの単票フォームをボタンで起動する方法を解説します。 横に長い情報より、1つのウィンドウで表示したいと ...
この[F_単票]フォームでいずれかのコントロールの値を変更したら、更新日時が自動取得され、そのデータが[T_売上の履歴]に保存されるようにします。
単票フォームの更新日時を取得する[埋め込みマクロ]
[更新日時]が自動的に取得されるようにします。
[F_単票]フォームのプロパティを開いて、「イベント」タブの[更新前処理]の[ビルダー選択]ボタン[…]をクリックします。
[選択の種類]が[フォーム]になっていることを確認してください。
[ビルダーの選択]ダイアログボックスが表示されます。
[マクロビルダー]を選択して、[OK]ボタンをクリックします。
以下のように[新しいアクションの追加]で[値の代入]を選択して、アイテムに[更新日]、式に[Now()]と入力します。
マクロは保存して閉じます。
フォームのプロパティの[更新前処理]には、以下のように[埋め込みマクロ]と表示されます。
これでフォーム[F_単票]のコントロール内で更新があれば、[更新日]フィールドに更新日時が保存されるようになります。
参考更新日時の取得については、以下の記事でも解説しています。以下の記事ではイベントプロシージャを使っています。
-
レコードの最終更新日時を自動保存してフォームに表示
Accessで更新日時を保存したいということは多いですね。 レコードが更新された日時をテーブルに保存する方法です。 VBAコード、埋め込みマ ...
マクロアクションは、[アクションカタログ]から選択してマクロウィンドウへ追加する方法もあります。
-
マクロツールで既存のアクションをコピーして活用(再利用)するには
Accessでは多くのマクロアクションが使用できます。 しかし、毎回アクションを選択して入力するのは面倒ですね。 マクロアクションは、コピー ...
追加クエリの作成
追加クエリを作成します。
[T_売上]テーブルを基に以下のように設定します。
フィールド[ID]の抽出条件も忘れないように入力します。
[forms]![F_帳票]![ID]
[デザイン]タブにある[クエリの種類]グループにある[追加]ボタンをクリックします。
[追加]ダイアログボックスで[追加先]の[テーブル名]に[T_売上の履歴]を選択します。
[OK]ボタンをクリックして、クエリに名前を付けて保存します。
ここでは、[Q_売上 追加クエリ]としています。
更新後に追加クエリを実行する[埋め込みマクロ]
追加クエリ[Q_売上 追加クエリ]を実行するためのマクロを下のように作成します。
今度は、フォームプロパティの[イベント]タブの[更新後処理]の[ビルダー選択]ボタン[…]ボタンをクリックします。
[ビルダーの選択]ダイアログボックスが表示されたら、[マクロビルダー]を選択して[OK]ボタンをクリックします。
以下のように[新しいアクションの追加]で[クエリを開く]を選択して、クエリ名に[Q_売上追加クエリ]を選択します。
このまま[F_単票]の[更新後処理]にマクロを指定してもいいのですが、このままだと[追加クエリを実行すると、テーブルのデータが変更されます]と[1件のレコードを追加します]という、以下のメッセージがクエリを実行する度に表示されるようになります。
マクロの編集
面倒なので、マクロを下のように[メッセージの設定]を追加して、[メッセージの表示]を[いいえ]に編集します。
[クエリを開く]アクションの前に設定します。
[メッセージの設定]は、[マクロツール]-[デザイン]タブの[表示/非表示]グループにある[すべてのアクションを表示]をクリックしないと一覧に表示されません。
マクロは右側をマウスでポイントすると[↑][↓]の矢印が表示されますので、この矢印でアクションの順番を変更することができます。
アクションクエリ実行時のメッセージを非表示にする方法は、以下の記事も参考になると思います。
-
アクションクエリ実行時の確認メッセージを非表示にする
Accesでアクションクエリを実行すると、既定では確認メッセージが表示されます。 このメッセージを非表示にする方法です。 以下の画像は、追加 ...
フォーム[F_単票]プロパティの[イベント]タブは以下のようになります。
フォーム[F_単票]で編集するたびに、テーブル[T_売上の履歴]に追加されていきます。
また、テーブル[T_売上の履歴]をもとにフォームを作成し、ボタンをクリックして履歴を閲覧できるようにすると、より便利です。
コマンドボタンをクリックしてフォームを開く方法は、以下の記事で解説しています。
-
コマンドボタンウィザードを使用したボタンの作成
Accessで起動時にメニューフォームを表示した後、ボタンをクリックして目的のフォームを開くようにしたいという要望はよくあります。 コマンド ...
参考テーブルのデータマクロを使用した更新記録テーブルの作成方法は、以下の記事で解説しています。データマクロは、Access2010以降の機能です。
フォーム以外で更新された内容も記録されますので、おすすめです。
-
更新日時を指定テーブルやフィールドへ自動で保存するデータマクロ
Accessのテーブルのデータを処理するためのマクロのことを[データマクロ]と呼びます。 テーブルで行った削除や追加、更新などの実行時に、設 ...
関連以下は、アクションクエリに関する記事です。
-
追加クエリの作成方法(追加先テーブルのフィールドへ特定の値を表示)
1つのテーブルに別のテーブルのレコードを追加する方法です。 3個テーブルがあって、各テーブルのフィールド名は同じです。 ここでは例として、テ ...
-
グループ化で重複レコードを削除したテーブルを作成
Accessで、1つのテーブルで重複したレコードを削除してマスターテーブルを作成する方法です。 クエリでグループ化を設定して重複レコードがな ...
-
レコードの差分をテーブルに追加(追加クエリの作成)
Accessで2つのテーブルの不一致レコードを抽出した後、その差分レコードをテーブルへ追加する方法です。 参考ここでは[ドキュメントウィンド ...
-
追加クエリを使ったオートナンバー型フィールドの番号の振り直し
オートナンバー型のあるテーブルでレコードを削除すると、欠番が出てしまいます。 Accessにとっては問題はなくても、見た目としては1から綺麗 ...
以下の記事ではアクションクエリについてもまとめています。
-
削除クエリの作成(すべてのレコード/条件を指定したレコード)
Accessでテーブルのすべてのレコードを削除するには、すべてのレコードを選択して削除する方法もありますが、削除クエリを作成して簡単に削除す ...
[メモ型]フィールドを使用すると、履歴を表示することができます。Access2013以降は、[長いテキスト]という名称になっています。
-
更新履歴の表示(メモ型/長いテキスト型の履歴を表示)
Access2007からのファイル形式である[.accdb]では、データ型の[メモ型]で変更履歴を保存することができます。 参考Access ...