追加クエリを使用して、テーブルに変更履歴を残す方法です。
参考ここでは、ウィンドウの表示は[ウィンドウを重ねて表示する]の設定にしています。
-
[タブ付きドキュメント]と[ウィンドウを重ねて表示する]の違い
Access2007以降、オブジェクトを表示すると、タブ付きウィンドウで表示されるようになっています。従来から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で更新日時を保存したいということは多いですね。 テーブルに[更新日時]フィールドを追加 まず、テーブルに[更新日時]という[日付 ...
追加クエリの作成
追加クエリを作成します。
[T_売上]テーブルを元に下のように設定します。
フィールド[ID]の抽出条件も忘れないように入力します。
[forms]![F_帳票]![ID]
[デザイン]タブにある[クエリの種類]グループにある[追加]ボタンをクリックします。
[追加]ダイアログボックスで[追加先]の[テーブル名]に[T_売上の履歴]を選択します。
[OK]ボタンをクリックしてクエリに名前を付けて保存します。
ここでは、[Q_売上 追加クエリ]としています。
更新後に追加クエリを実行する[埋め込みマクロ]
追加クエリ[Q_売上 追加クエリ]を実行するためのマクロを下のように作成します。
今度は、フォームプロパティの[イベント]タブの[更新後処理]の[...]ボタンをクリックします。
[ビルダーの選択]ダイアログボックスが表示されたら、[マクロビルダー]を選択して[OK]ボタンをクリックします。
以下のように[新しいアクションの追加]で[クエリを開く]を選択して、クエリ名に[Q_売上追加クエリ]を選択します。
このまま[F_単票]の[更新後処理]にマクロを指定してもいいのですが、このままだと[追加クエリを実行すると、テーブルのデータが変更されます]と[1件のレコードを追加します]という、以下のメッセージがクエリを実行する度に表示されるようになります。
マクロの編集
面倒なので、マクロを下のように[メッセージの設定]を追加して、[メッセージの表示]を[いいえ]に編集します。
[クエリを開く]アクションの前に設定します。
参考[メッセージの設定]は、[マクロツール]-[デザイン]タブの[表示/非表示]グループにある[すべてのアクションを表示]をクリックしないと一覧に表示されません。
マクロは右側をマウスでポイントすると[↑][↓]の矢印が表示されますので、この矢印でアクションの順番を変更することができます。
アクションクエリ実行時のメッセージを非表示にする方法は、以下の記事も参考になると思います。
-
アクションクエリ実行時の確認メッセージを非表示にする
以下のメッセージウィンドウは、追加クエリを実行したときに表示されるメッセージです。このメッセージを非表示にする方法です。 場合によっては、確 ...
フォーム[F_単票]プロパティの[イベント]タブは以下のようになります。
フォーム[F_単票]で編集するたびに、テーブル[T_売上の履歴]に追加されていきます。
また、テーブル[T_売上の履歴]をもとにフォームを作成し、ボタンをクリックして履歴を閲覧できるようにすると、より便利です。
コマンドボタンをクリックしてフォームを開く方法は、以下の記事で解説しています。
-
ウィザードを使ったコマンドボタンの作成
Accessで起動時にメニューフォームを表示した後、ボタンをクリックして目的のフォームを開くようにしたいという要望はよくあります。 コマンド ...
関連以下は、アクションクエリに関する記事です。
-
追加クエリの作成方法(追加先テーブルのフィールドへ特定の値を表示)
1つのテーブルに別のテーブルのレコードを追加する方法です。 3個テーブルがあって、各テーブルのフィールド名は同じです。 ここでは例として、テ ...
-
グループ化で重複レコードを削除したテーブルを作成
Accessで、1つのテーブルで重複したレコードを削除してマスターテーブルを作成する方法です。 クエリでグループ化を設定して重複レコードがな ...
-
レコードの差分をテーブルに追加(追加クエリの作成)
Accessで2つのテーブルの不一致レコードを抽出した後、その差分レコードをテーブルへ追加する方法です。 参考ここでは[ドキュメントウィンド ...
-
追加クエリを使ったオートナンバー型フィールドの番号の振り直し
オートナンバー型のあるテーブルでレコードを削除すると、欠番が出てしまいます。 Accessにとっては問題はなくても、見た目としては1から綺麗 ...
以下の記事ではアクションクエリについてもまとめています。
-
削除クエリの作成(すべてのレコード/条件を指定したレコード)
Accessでテーブルのすべてのレコードを削除するには、すべてのレコードを選択して削除する方法もありますが、削除クエリを作成して簡単に削除す ...
[メモ型]フィールドを使用すると、履歴を表示することができます。Access2013以降は、[長いテキスト]という名称になっています。