FC2ブログ

生徒と家族の連携(その1)

今回はレポートでの生徒と家族の連携について考えてみます。

フォームにおいても同じテーマがありましたが、その時はサブフォームを使って実現しました。レポートにおいてもサブレポートというものがあり、その手法で実装が可能ですが、ここではグループ化を使って連携する方法で実現してみます。

まず、レポートのレコードソースプロパティでクエリービルダを起動します。現在はレコードソースには「T_生徒番号」が指定されていると思いますが、そのまま起動すると、クエリービルダにT_生徒番号だけが表示されていると思います。

そこで、テーブルを追加し、「T_家族」と繋ぎます。T_生徒番号とT_家族は生徒番号で連携し、1:多の関係になります。そこでクエリーの結果を表示させて確認して見て下さい。生徒の数×1生徒当たりの家族の数分の行数が表示されたと思います。

 リレーション

ここで注意したいのは両方のテーブルで同一のフィールド名があったときの対処です。データベースにおいてテーブル名が違えば同一フィールド名は定義可能ですが、同じクエリー(SQL)上で使用するときには一意になるように識別しなければなりません。ACCESSでは自動的に[テーブル名].[フィールド名]となります。自分で任意に名前を付けたい場合は任意の名前と本来のフィールド名をコロンで区切ります。

任意に指定した名前:フィールド名

リネイム 

続柄はコードなので、名称に変換するする必要があります。前回レポートの性別のコントロールソース中でCHOOSE関数を使用して実装しましたが、実は関数はクエリーの中でも使用できます。構文は全く同様です。そして循環参照を避けるためにリネイムしています。

choose関数 

これでレコードソースがクエリーとして生成されました。ここまでで生徒と家族を連携する準備が整ったことになります。次はレポートの設定に戻って、デザインで「グループ化と並び替え」をクリックします。

グループ化と並び替え 

プロパティシートが現れますので、グループ化として生徒番号を指定します。

生徒番号のグループ化 

すると、生徒番号ヘッダーが生成されます。デザインも以下のように変更します。家族の内容は詳細セクションとして定義します。出力イメージとしては1生徒番号の内容が出力された後に各家族の内容が(複数あれば複数行)出力されます。
  
生徒番号ヘッダー

デフォルトの設定としては生徒番号が変わっても続けて同一ページに出力されます。それは改ページプロパテが「しない」になっているからです。

改ページプロパティ 

もし、生徒番号がブレイクしたら、改ページをしたいのであれば以下のオプションから選択します。

カレントセクションの前:改ページをしてから新しい生徒番号の内容が出力されます。
カレントセクションの後:新しい生徒番号の内容が出力されてから、改ページされます。
カレントセクションの前後:新しい生徒番号を出力する前後に改ページが行われます。

一通り設定を施したプレビューイメージは以下の通りになります。

プレビュー

実はここでバグがある事に気付かれたでしょうか。生徒件数が3件と表示されています。Count関数は詳細セクションの表示件数つまり総家族レコードの件数をカウントしているのです。ここで必要なのは生徒番号レコードの件数です。レポートフッターでT_生徒番号のレコードをカウントするにはDcount関数を使用します。

DCount():定義域集合関数と言って指定されたテーブル又はクエリーのレコード件数を取得します。抽出条件を指定することも出来ます。ここでは以下のように指定します。

DCount("*","T_生徒番号")

レポートの「グループ化」という機能を使うことにより、サブレポートを使用せずとも生徒と家族の連携を実現できました。次回では逆にサブレポートを使って連携を実現したいと思います。
関連記事
スポンサーサイト



テーマ : データベース
ジャンル : コンピュータ

コメントの投稿

非公開コメント

最新記事
全記事表示リンク

全ての記事を表示する

月別アーカイブ
カテゴリ
お問い合わせ
まずはこちらのフォームより御一報下さい。

名前:
メール:
件名:
本文:

検索フォーム
RSSリンクの表示
アクセスランキング
[ジャンルランキング]
コンピュータ
677位
アクセスランキングを見る>>

[サブジャンルランキング]
ソフトウェア
96位
アクセスランキングを見る>>
ブログランキング

FC2Blog Ranking