Accessのテーブル間でリレーションシップの設定すると、2つのテーブルに関連性が生じます。
テーブルをデータシートビューで開くと、各レコードの左側に[+](展開インジゲーター)が表示されていることがあります。
[+]をクリックして展開すると、関連付けされたテーブルが[サブデータシート]として表示され、共通フィールドのデータを参照できます。
このサブデータシートは、リレーションシップの設定をすると、自動的に表示されるようになっていますが、手動でリレーションシップが設定されていないテーブルをサブデータシートとして表示させることもできます。
また、サブデータシートを非表示にすることもできます。
参考ここでのウィンドウは、[タブ付きドキュメント](既定)の設定にしています。[ウィンドウを重ねて表示する]と[タブ付きドキュメント]の違いについては、以下の記事で解説しています。
-
[タブ付きドキュメント]と[ウィンドウを重ねて表示する]の違い
Access2007以降、オブジェクトを表示すると、タブ付きウィンドウで表示されるようになっています。 昔からAccessを使用している方に ...
テーブルの確認
ここでは、以下の3つのテーブルを使って解説します。
- T_社員名簿
- T_商品管理
- T_売上記録
以下は、テーブル[T_社員名簿]のデザインビューとデータシートビューです。主キーは、[社員ID]です。
以下は、テーブル[T_商品管理]のデザインビューとデータシートビューです。主キーは、[商品ID]です。
以下は、テーブル[T_売上記録]のデザインビューとデータシートビューです。主キーは、[ID]です。
リレーションシップの設定
テーブル間でリレーションシップの設定をします。
[データベースツール]タブの[リレーションシップ]グループにある[リレーションシップ]をクリックします。
リレーションシップ
たとえばテーブルどうしでIDフィールドや名前フィールドが一致しなければならないなど、テーブル間のデータの関連付けを定義します。
[リレーションシップデザイン]タブの[リレーションシップ]グループにある[テーブルの追加]をクリックします。
[テーブルの表示]から3つのテーブルを選択して[追加]ボタンをクリックします。
すべてのテーブルを選択する場合は、[Shift]キーを使って選択すると効率的です。先頭のテーブルを選択後、[Shift]キーを押したまま、最後のテーブルを選択します。
連続したテーブルを選択する場合は[Shift]キー、連続していないテーブルの選択の場合は[Ctrl]キーを使用します。
テーブルが表示されたら、[テーブルの表示]は[閉じる]ボタンをクリックして閉じます。
参考バージョンによって異なると思いますが、[テーブルの追加]やショートカットメニューから[テーブルの表示]をクリックすると、Microsoft 365のAccessとAccess 2021では[テーブルの追加]作業ウィンドウとして表示されます。
クエリデザインの「テーブルの追加」は作業ウィンドウに表示される
リレーションシップの作成
ここでは、以下のようにリレーションシップを設定します。
[主キー]のテーブル側に[1]、関連テーブル側に[∞]が表示されます。
また、[主キー](1)が設定されたテーブルのことを[主テーブル]、[外部キー](∞)が表示されたテーブルを[関連テーブル]と呼びます。
参考リレーションシップは、テーブルの主キーのあるテーブルから、関連テーブルの共通フィールドへドラッグします。
[リレーションシップ]ダイアログボックスが表示されますので、[参照整合性]のチェックボックスをオンにして、[作成]ボタンをクリックします。
リレーションシップについては、以下の記事で解説しています。参照整合性の設定ができない場合の解決方法も記していますので、参考にしてください。
-
リレーションシップの作成と参照整合性の設定
Accessでは、複数のテーブルがあって、そのテーブル間の共通フィールドを関連付けることができます。この関連付けのことを[リレーションシップ ...
サブデータシートを開いて使用する
サブデータシートは、テーブル間にリレーションシップを設定すると自動的に設定されます。
リレーションシップの設定後、テーブルをデータシートビューで開くと、レコードの左側に[+]マークが表示されているテーブルがあります。
テーブル[T_社員名簿]と[T_商品管理]には、[+](展開インジゲーター)が表示されています。
テーブル[T_売上記録]には、表示されていません。
リレーションシップで一側のテーブル(主テーブル)には、自動的にサブデータシートが表示されます。
各レコードの[+](展開インジデーター)をクリックすると、多側のテーブル(関連テーブル)のレコードが表示されます。
以下は、テーブル[T_社員名簿]の[K004]と[K005]の[+]をクリックして展開しています。
以下は、テーブル[T_商品管理]の[S1001]の[+]をクリックして展開しています。
[+]をクリックすると[-]になります。サブデータシートを閉じる場合は、[-]をクリックします。
サブデータシートでレコードの追加
サブデータシートでも、通常のテーブルと同じようにレコードの追加や変更ができます。
テーブル[T_商品管理]の[S1001]の[+]をクリックして、サブデータシートに新規レコードを追加します。
リレーションシップが設定されているフィールドには、自動で値が入力されます。
以下は、テーブル[T_売上記録]です。新しいレコードが追加されています。
テーブル[T_社員名簿]の[K004]のサブデータシートを確認すると、以下のようになっています。
参考サブデータシートを開いている状態で、そのテーブルをデザインビューで開こうとすると、以下のメッセージウィンドウが表示されます。サブデータシートを閉じてから、デザインビューを開くようにしてください。
テーブル"〇〇"にバインドされているオブジェクトが開かれているか、他のユーザーがテーブルを開いています。テーブルを読み取り専用で開きますか?
テーブルを読み取り専用で開くには、[はい]をクリックしてください。
テーブルを読み取り/書き込み可能な状態で開くには、[いいえ]をクリックし、テーブルと、テーブルにバインドされているすべてのオブジェクトが閉じていることを確認して、デザインビューでテーブルを開き直してください。
サブデータシートの設定
サブデータシートが自動設定されたテーブルをデザインビューで開いて確認してみます。
テーブル[T_社員名簿]をデザインビューで開いて、[テーブルデザイン]タブの[表示/非表示]グループにある[プロパティシート]をクリックします。
プロパティシートは、キーボードから[F4]キーを押しても、表示できます。
テーブルプロパティが表示されます。
[サブデータシート名]は[自動]となっています。
リレーションシップを設定した一側のテーブル(主テーブル)は、[自動]となります。
サブデータシートを非表示にしたい場合
サブデータシートを非表示にしたい場合は、プロパティの[サブデータシート名]のプルダウンメニューから[なし]を選択します。
データシービューに切り替えると、以下のように[+](展開インジゲーター)は表示されません。
参考プロパティの[サブデータシート名]のプルダウンメニューには、クエリを作成していれば、クエリも表示されます。
サブデータシートに他のテーブルを表示したい場合
テーブル[T_社員名簿]のサブデータシートには、テーブルの[T_売上記録]のデータが表示されています。
このサブデータシートにテーブル[T_商品管理]のデータを表示したいと思います。
テーブル[T_社員名簿]をデザインビューで開いて、テーブルプロパティを表示します。
[サブデータシート名]に[テーブル.T_商品管理]を選択します。
[リンク子フィールド]に[開発担当ID]、[リンク親フィールド]に[社員ID]を設定します。
データシートビューに切り替えると、以下のようにサブデータシートには、テーブル[T_商品管理]のデータが表示されるようになります。
既定の状態に戻したい場合は、プロパティの[サブデータシート名]を[自動]にします。
参考リレーションシップを設定していない場合は、[リンク子フィールド]と[リンク親フィールド]を指定しますが、リレーションシップが設定されている場合は、自動的に設定されます。
先にリレーションシップで以下のように設定していた場合は、
テーブル[T_社員名簿]の[+](展開インジゲーター)をクリックすると、[サブデータシートの挿入]ダイアログボックスが表示されます。
どのテーブルのデータを表示するかを選択します。
テーブルを選択すると、[リンク子フィールド]と[リンク親フィールド]は自動で設定されます。
関連テーブルにサブデータシートを設定
リレーションシップの設定をすると、自動的に一側のテーブル(主テーブル)にサブデータシートが設定されますが、手動で設定すれば、多側のテーブル(関連テーブル)にもサブデータシートを設定できます。
テーブル[T_売上記録]にテーブル[T_商品管理]のデータを表示するようにしたいと思います。
テーブル[T_売上記録]をデザインビューで開いて、テーブルのプロパティを表示します。
[サブデータシート名]に[テーブル.T_商品管理]を指定します。[リンク子フィールド]と[リンク親フィールド]は自動で設定されます。
データシートビューに切り替えると、以下のようになります。
サブデータシートを表示すると、商品IDの情報を参照できます。工夫して分かりやすいように設定してみてください。
データシートビューで設定
データシートビューでも設定できます。
サブデータシートを追加したいテーブルをデータシートビューで開きます。ここでは、テーブル[T_売上記録]を開きます。
[ホーム]タブの[レコード]グループにある[その他]から[サブデータシート]-[サブデータシート]をクリックします。
[サブデータシートの挿入]ダイアログボックスが表示されます。
サブデータシートとして表示したいテーブルを選択します。[リンク子フィールド]と[リンク親フィールド]は自動で設定されます。
リレーションシップを設定していない場合は、[リンク子フィールド]と[リンク親フィールド]を指定します。
[OK]ボタンをクリックします。
デザインビューで設定した場合と同じように作成できます。
サブデータシートがあるテーブルでフォームを作成
サブデータシートがあるテーブルでフォームを作成すると、自動的にサブフォームを含むフォームを作成できます。
テーブル[T_商品管理]を選択して、[作成]タブの[フォーム]グループにある[フォーム]をクリックします。
商品IDに関連付けされたサブフォームが自動で作成できます。
以下の記事で解説しています。
-
サブフォームを含むフォームを簡単作成
Accessで1つのフォーム上に2つのテーブルの情報を表示して、同時に閲覧できると便利な場合があります。 たとえば、[得意先]テーブルと[受 ...
参考サブフォームを含むフォームは、フォームウィザードを使って作成する方法もあります。メインフォームとサブフォームをウィザードで作成します。
-
フォームウィザードを使ってサブフォームを含むフォームを作成
フォームウィザードで2つのテーブルやクエリを指定して、関連付けされたメインフォームとサブフォームを作成できます。 フォーム作成のもとになるテ ...
コントロールの[サブフォーム/サブレポート]ボタンを使用して、メインフォームの任意の位置へサブフォームを組み込むこともできます。
-
サブフォームウィザードを使ってメインフォームへサブフォームを組み込む
メインフォームにサブフォームを組み込んで、サブフォームを含むフォームを作成できます。 コントロールの[サブフォーム/サブレポート]ボタンを使 ...