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