古いレコードまたは非アクティブなレコードを定期的にアーカイブすることで、Microsoft Access データベースを整理して管理できるようにします。 データベース内のすべてのテーブル、特定のテーブル、または特定のレコード (特定の日付より古いレコードなど) のみをアーカイブできます。 このトピックでは、3 つの異なるオプションを使用して Access データベース内のデータをアーカイブする方法について説明します。
この記事の内容
アーカイブを検討する必要があるのはいつですか?
コンピューター上のデータベースに、使用する予定のないデータが含まれているが、ある時点でデータが必要になった場合や、データ保持ポリシーを満たす場合に便利なデータを保持する場合、アーカイブはそのようなデータを保持する良い方法です。 アーカイブは、多くの場合、月の終わりなどの日付条件に基づいてデータを保持するために使用されます。
データをアーカイブする方法
次の表に、データをアーカイブするメソッド、メソッドの説明、各メソッドを使用するタイミングの説明、およびメソッドに関するその他の具体的な考慮事項を示します。
方法 |
説明 |
when..を使用します。 |
他の考慮事項 |
特定のテーブルのアーカイブ コピーを定期的に作成し、そのテーブルを新しい空のテーブル コピーに置き換えます。 |
テーブル内のすべてのレコードは、アーカイブするかどうかを決定するために使用する条件を満たしています。 例: 毎日の極端な温度を格納するテーブルがあります。 毎年、テーブルをアーカイブし、空のテーブルで新たに開始します。 |
|
|
バックエンド データベースのアーカイブ コピーを定期的に作成し、バックエンド データベースを新しい空のデータベースに置き換えます。 分割データベース (すべてのテーブルを含むバックエンド データベース ファイル、および他のすべてのデータベース オブジェクトを含むフロントエンド データベース ファイルを含むデータベース) が必要です。 |
データベース内のほとんどのテーブルのすべてのレコードは、アーカイブするかどうかを決定するために使用する条件を満たしています。 例: データベースは、気象データの種類が異なる複数のテーブルで構成されます。 毎年、すべてのテーブルをアーカイブします。 |
|
|
アーカイブ用のレコードを選択するクエリを定期的に実行し、データをアーカイブ テーブルに追加した後、クエリを実行して (元のテーブルから) 同じレコードを選択して削除します。 |
テーブル内の一部のレコードは、アーカイブするかどうかを決定するために使用する条件を満たしています。 例: チェックイン日が 1 年以上前の場合は、ライブラリ トランザクションをアーカイブする (チェックアウト)。 |
警告: クエリでパラメーターを使用する必要がある場合は、パラメーターを処理するフォームを作成する必要があります。 それ以外の場合は、データの損失を危険にさらします。 |
参照整合性の回避
アーカイブするレコードが他のテーブルのレコードに関連している場合は、リレーションシップを回避する必要があります。 アーカイブするレコードが "子" レコード ( 一対多リレーションシップの "多" 側に属している) の場合は、問題なく安全にアーカイブできます。 アーカイブするレコードが "親" レコード ( 一対多リレーションシップの "1" 側に属している) の場合、関連する "子" レコードをアーカイブすると、次の場合があります。
-
"親" レコードを削除できないようにします。 アーカイブ テーブルに "親" レコードを既に追加している場合、問題が発生する可能性があります。
または
-
"孤立" になります。存在しない "親" に属するレコード。 これにより、"孤立" レコードを使用するデータベースのデータの整合性と機能に問題が発生する可能性があります。
参照整合性を考慮するには、次の手順を実行します。
-
アーカイブするレコードに属する "子" レコードを決定します。 たとえば、ライブラリで貸し出された資産のレコードをアーカイブするには、まず、それらの資産に対して開いているトランザクションがあるかどうかを確認します。つまり、資産がチェックアウトされたが返されていないかどうかなどです。
-
次のいずれかの操作を行います。
-
"子" レコードを常に安全に削除できる場合は、リレーションシップで参照整合性が適用され、連鎖削除が適用されていることを確認します。 これにより、関連するすべての "子" レコードが削除されます。
-
"子" レコードを常に安全に削除できない場合は、データベース内のすべてのテーブルをアーカイブすることを検討してください。
-
Create"子" レコードを持たない "親" レコードを選択するクエリです。 次に、最初のクエリを使用して、"親" テーブルを使用するのではなく、アーカイブ クエリを作成します (「 レコードをアーカイブ テーブルに定期的に移動する」セクションを参照してください)。
-
テーブルを定期的に置き換える
テーブル内のすべてのデータをアーカイブする場合は、テーブルを空のコピーに定期的に置き換えることができます。
重要: アーカイブするテーブルが他のテーブルに関連している場合は、 参照整合性を回避する必要がある場合があります。
-
ナビゲーション ウィンドウで、アーカイブするテーブルを選択し、Ctrl キーを押しながら C キーを押し、Ctrl + V キーを押します。
-
[ テーブルを貼り付け] ダイアログ ボックスの [ 貼り付けオプション] で、[ 構造のみ] を選択し、[OK] をクリック します。
コピーの名前は、 元のテーブル名のコピーとしてアクセスします。 -
ナビゲーション ウィンドウで、元のテーブルを右クリックし、ショートカット メニューの [名前の変更 ] をクリックします。
テーブルに別の名前を付けて、"DailyTemperatureExtremes_archive_2019" など、テーブルに含まれるものを示します。 -
ナビゲーション ウィンドウで、空のコピーを右クリックし、ショートカット メニューの [名前の変更 ] をクリックします。 元のテーブルの名前で名前を変更します。
すべてのテーブルを定期的に置き換える
分割データベースを使用する場合は、バックエンド データベースを空のコピーに置き換えることで、すべてのテーブルを定期的に置き換えることができます。
これを行うには、最初に空のコピーを準備します。 データベースの設計が変更されない限り、アーカイブするたびにこの空のコピーを再利用できます。 アーカイブするには、既存のバックエンド データベースの名前を変更してアーカイブであることを示し、空のコピーを新しいバックエンド データベースとして保存します。
バックエンド データベースの空のコピーを準備する
まず、バックエンド データベース内のすべてのテーブルのテーブル定義をインポートします。
-
[ファイル] タブの [新規作成] をクリックし、[空のデータベース] を選択し、[Create] をクリックします。
-
Table1 を閉じます。
-
[ 外部データ ] タブの [ & リンクのインポート ] グループで、[ アクセス] をクリックします。
-
[ 外部データの取得 - データベースへのアクセス ] ダイアログ ボックスで、[ テーブル、クエリ、フォーム、レポート、マクロ、モジュールを現在のデータベースにインポートする] を選択し、[ 参照] をクリックします。
-
[ ファイルを開く ] ダイアログ ボックスで、バックエンド データベースを選択します。 [ 開く ] をクリックして [ ファイルを開く ] ダイアログ ボックスを閉じ、[OK] をクリック します。
-
[ オブジェクトのインポート ] ダイアログ ボックスで、[ オプション] をクリックします。
-
[ テーブルのインポート] で、[ 定義のみ] を選択します。
-
[ テーブル ] タブで、[ すべて選択] をクリックし、[ OK] をクリックして、[ 閉じる] をクリックします。
空のコピー内の参照テーブルにデータを追加する
参照テーブルごとに、次の手順を実行します。
-
既存のバックエンド データベース内の参照テーブルにリンクします。
-
元のレコードのすべてのレコードをコピーに追加する追加クエリをCreateします。
バックエンド データベースを空のコピーに置き換える
まず、既存のバックエンド データベースの名前を変更して、アーカイブであることを示します。 次に、空のコピーを開き、元のバックエンド データベース名を使用して保存します。
-
[ ファイル ] タブをクリックし、[ 名前を付けてデータベースを保存] をクリックします。 開いているすべてのオブジェクトを閉じるよう求められる場合があります。[OK] をクリック します。 [ 名前を付けて保存 ] ダイアログ ボックスが開きます。
-
[名前を付けて保存] ダイアログ ボックスの上部にある [保存場所] ボックスで、ファイルを元のバックエンド データベースと同じ場所に保存していることを確認します。
-
[ ファイル名 ] ボックスに、元のバックエンド データベースの名前を入力します。
-
[ 名前を付けて保存] ボックスで 、[ Access Database (*.accdb)] を選択します。
レコードをアーカイブ テーブルに定期的に移動する
これは、アーカイブするレコードを含むテーブルの空のコピーを作成し、元のテーブルからアーカイブ テーブルにレコードをコピーする追加クエリを作成し、アーカイブされたレコードを元のテーブルから削除する 削除クエリ を作成し、最後にマクロを作成して、アーカイブする場合に実行できる両方のクエリを実行するマクロを作成する 4 つのステップ プロセスです。 この一見複雑なプロセスは、以下に示す順序で手順を実行すると簡単です。
手順 2: アーカイブ テーブルにデータをコピーする追加クエリをCreateする
手順 3: 削除クエリをCreateして元のテーブルからデータを削除する
手順 4: 追加クエリと削除クエリの両方を実行するマクロをCreateする
手順 1: アーカイブ テーブルをCreateする
アーカイブされたすべてのレコードを 1 つのテーブルに保持するには、この手順を 1 回実行します。 この手順で作成したアーカイブ テーブルには、アーカイブされたすべてのレコードが保持されます。
新しいアーカイブ テーブルを作成するときに古いアーカイブ テーブルを削除するには、この手順を実行する代わりに、 テーブル作成クエリ を使用してアーカイブ テーブルにデータをコピーできます。 これを行うには、 手順 2 に進みます。
アーカイブするたびに新しいアーカイブ テーブルを使用し、古いアーカイブ テーブルを保持するには、新しいアーカイブ テーブルを作成する前に古いアーカイブ テーブルの名前を変更します。 日付に基づいてアーカイブする場合は、古いアーカイブ テーブルの名前を、それらが表す日付範囲に従って指定することを検討してください。
-
ナビゲーション ウィンドウで、アーカイブするレコードがあるテーブルを選択し、Ctrl キーを押しながら C キーを押し、Ctrl + V キーを押します。
-
[ テーブル名 ] ボックスで、[ コピー先 ] という単語を削除し、アンダースコアと単語 "archive" を既存のテーブル名に追加し、[OK] をクリック します。 たとえば、元のテーブルが Transactions という名前の場合、アーカイブ テーブルには Transactions_archive という名前が付けられます。
-
[ テーブルを貼り付け] ダイアログ ボックスの [ 貼り付けオプション] で、[ 構造のみ] を選択します。
手順 2: アーカイブ テーブルにデータをコピーする追加クエリをCreateする
-
[作成] タブの [クエリ] グループで [クエリ デザイン] をクリックします。
-
アーカイブするレコードを含むテーブルを追加します。
-
クエリ デザイン ウィンドウで、先ほど追加したテーブルのアスタリスク (*) をダブルクリックします。 テーブル名とアスタリスクは、クエリ デザイン グリッドの最初の列に表示されます。
注: アスタリスクは、クエリ出力にテーブルのすべてのフィールドをクエリに含める必要があることを示します。 アスタリスクを使用すると、フィールドがテーブルに追加または削除されると、クエリ出力はそれに応じて調整されます。
-
クエリ デザイン ウィンドウで、レコードをアーカイブする前に満たす条件を指定するために使用するフィールドをダブルクリックします。 たとえば、[トランザクション] テーブルに [チェックイン日] というフィールドがあり、その日付が 1 年以上前のすべてのレコードをアーカイブする場合は、フィールドをダブルクリックすると、クエリ デザイン グリッドの次の空の列に表示されます。
追加のフィールドで条件を使用する場合は、この手順を繰り返します。
-
[抽出条件] 行を使用して、先ほど追加したフィールドの条件を指定します。 たとえば、抽出条件行の式<#1/1/2019# を使用して、チェックイン日を 2019 年 1 月 1 日より前に指定する必要があります。
アーカイブするたびに条件値が変更される場合は、クエリに入力を求める必要があります。 これを行うには、[ 抽出条件] 行でパラメーターを使用して、クエリで入力を求めます。 パラメーターを使用するには、通常と同じように式を使用しますが、指定した値ではなく、角かっこで囲まれた簡単な質問を使用します。 たとえば、次のように、式 <[Archive transactions completed before:]を使用できます。
パラメーターの使用の詳細については、クエリの概要に関 する記事を参照してください。
または 行を使用して別の条件を指定することもできます。 抽出条件の使用方法の詳細については、「クエリの抽出条件の例」を参照してください。
ヒント: 日付フィールドを使用して条件を指定し、現在の日付より古いレコードをすべてアーカイブする場合は、日付フィールドの [抽出条件] 行に「<Date()」と入力します。
-
次のいずれかの操作を行います。
アーカイブ テーブルを既に作成している場合は、追加クエリを使用して、指定したレコードをそのテーブルに追加します。
-
[デザイン] タブの [クエリの種類] グループで [追加] をクリックします。
-
[ 追加 ] ダイアログ ボックスの [ テーブル名 ] ボックスで、アーカイブ テーブルの名前を選択し、[OK] をクリック します。
クエリ デザイン グリッドに、[ 追加 ] 行が表示されます。
-
条件の指定に使用したフィールドの [ 追加 ] 行をオフにします。 (アスタリスクにのみ 、Append To の値を指定する必要があります)。
アーカイブ テーブルを作成していない場合は、テーブル作成クエリを使用して、指定したレコードを使用してアーカイブ テーブルを作成します。
-
[デザイン] タブの [クエリの種類] グループで [テーブルの作成] をクリックします。
-
[ テーブルの作成 ] ダイアログ ボックスの [ テーブル名 ] ボックスにアーカイブ テーブルの名前を入力し、[OK] をクリック します。
-
-
クエリを保存するには、Ctrl キーを押しながら S キーを押します。
手順 3: 削除クエリをCreateして元のテーブルからデータを削除する
-
[作成] タブの [クエリ] グループで [クエリ デザイン] をクリックします。
-
アーカイブするレコードを含むテーブルを追加します。
-
クエリ デザイン ウィンドウで、先ほど追加したテーブルのアスタリスク (*) をダブルクリックします。 テーブル名とアスタリスクは、クエリ デザイン グリッドの最初の列に表示されます。
-
クエリ デザイン ウィンドウで、追加クエリで条件を指定するために使用したのと同じフィールドをダブルクリックします。
-
[抽出条件] 行を使用して、先ほど追加したフィールドの条件を指定します。 抽出条件の使用方法の詳細については、「クエリの抽出条件の例」を参照してください。
重要: 追加クエリまたはテーブル作成クエリでパラメーターが使用されている場合は、削除クエリでもパラメーターが使用されていることを確認します。 また、両方のクエリに同じ値を入力します。 異なるパラメーター値を入力すると、データが失われる可能性があります。 データ損失を防ぐために、フォームを使用して値を収集し、クエリでフォームに入力値を要求することを検討してください。 詳細については、クエリの概要に関 する記事を参照してください。
-
[ デザイン ] タブの [ クエリの種類 ] グループで、[削除] をクリック します。
[ 削除] 行がクエリ デザイン グリッドに表示されます。
-
クエリを保存するには、Ctrl キーを押しながら S キーを押します。
手順 4: 追加クエリと削除クエリの両方を実行するマクロをCreateする
-
作成タブのマクロとコードグループで、マクロをクリックします。
-
[ 新しいアクションの追加] の横にあるドロップダウン矢印をクリックし、[ OpenQuery] をクリックします。
OpenQuery アクションが表示され、引数が表示されます。
-
[ クエリ名 ] ボックスで、 手順 2 で作成した (追加またはテーブル作成) クエリを選択します。
-
[ 新しいアクションの追加] の横にあるドロップダウン矢印をクリックし、[ OpenQuery] をクリックします。
OpenQuery アクションが表示され、引数が表示されます。
-
[ クエリ名 ] ボックスで、 手順 3 で作成した削除クエリを選択します。
-
Ctrl + S キーを押してマクロを保存します。
レコードをアーカイブする場合は、マクロを実行します。