フォーム上にデータシートとサブデータシートを表示する

 フォーム上にテーブルのようなデータシートが表示されていて、さらにサブデータシートが展開できるようになっている、というのがあります。
 あれはフォームとサブフォームで、それぞれの「既定のビュー」を「データシートビュー」とした場合の結果です。つまり(テーブルの)サブデータシートとは実は関係がないのですが、せっかくですので以下では実際に設定してみます。

設定例

f:id:accs2014:20180701150355p:plain:right:w400

 まずはサンプルになるテーブルです。
 こちらがサブデータシートの「親」にあたる部署テーブルです。


f:id:accs2014:20180701150352p:plain:right:w600

 こちらが「子」にあたる社員テーブルです。


f:id:accs2014:20180701150350p:plain:right:w600

 さて、部署テーブルをレコードソースとするフォーム「部署フォーム」を作成します。
 「既定のビュー」は「データシート」とします。


f:id:accs2014:20180701150347p:plain:right:w600

 さて、プロパティを詳しく見てみると「サブデータシートの展開」「サブデータシートの高さ」という項目があるものの、サブデータシートとなるモノを指定するところがありません。もしあれば社員テーブルを指定してみるところですが…


f:id:accs2014:20180701150344p:plain:right:w300

 実際にデータシートビューで開いたところですが、サブデータシートは設定されておらず、レコードの左端に「+」マークは現れません。
 テーブルの内容から自動的にサブデータシートが設定されるというものでもない、というわけです。
 (なお、後で見るようにサブデータシートは実際に表示できますので、「サブデータシートの展開」「サブデータシートの高さ」の2つのプロパティは設定しておいても無意味ではありません。)


f:id:accs2014:20180701150512p:plain:right:w600

 そこで次に、社員テーブルをレコードソースとするフォーム「社員フォーム」を作成します。
 「既定のビュー」は「データシート」とします。
 これは保存していったん閉じます。


f:id:accs2014:20180701150508p:plain:right:w600

 再び「部署フォーム」をデザインビューで開き、そこにサブフォームとして「社員フォーム」を置きます。
 そして、そのプロパティ「リンク親フィールド」「リンク子フィールド」を共に「部署コード」とします。
 テーブルの設定が適切であれば、サブフォームをグリッドにドロップするだけで勝手にこうなっているものと思います。


f:id:accs2014:20180701150505p:plain:right:w400

 以上により、部署フォームをデータシートビューで開くとサブデータシート(正確にはサブフォームですが)として社員テーブルが表示されます。
 明示的にサブデータシートを設定するところがないのでわかりにくいですが、フォームに関しては「メインフォームとサブフォームをリンク親(子)フィールドで結びつけ、データシートビューで開くとサブデータシート状になる」というわけです。


f:id:accs2014:20180701150502p:plain:right:w500

 この部署フォームを別のフォーム上に置くと、想定したような「フォーム上のデータシートにサブデータシートが設定されている」という見た目になります。
 ちょっとややこしいですが画像に沿って説明しますと「メインフォーム」が文字通りメインフォーム、「部署フォーム」がサブフォーム、「社員フォーム」がさらにそのサブフォーム、ということになります。


まとめ

 回りくどくなりましたが、フォーム上でサブデータシートを表示するために必要なのは「メインフォームとサブフォームの設定」です。テーブル側でのサブデータシートの設定は無関係(不要)です。また、「既定のビュー」の設定によりメインフォームがデータシートビューでサブフォームが単票フォーム、といった組み合わせにすることも可能です。

 最後になりますがテーブルにおけるサブデータシートの設定については次の記事を参照願います。

www.accessdbstudy.net