パラメータを使用したマスタ/詳細関係の設定
クエリタイプ データセットの使用 への移動
詳細セットがクエリタイプのデータセットになっているマスタ/詳細関係を設定するには、パラメータを使用するクエリを指定する必要があります。これらのパラメータは、マスタ データセットの現在のフィールド値を参照します。マスタ データセットの現在のフィールド値は実行時に動的に変わるため、マスタ レコードが変わるたびに詳細セットのパラメータをバインドし直す必要があります。そのためのコードをイベント ハンドラを使って書くこともできますが、すべてのクエリタイプ データセットには、DataSource プロパティを用いたもっと簡単なメカニズムが用意されています。
パラメータ化されたクエリのパラメータ値が設計時にバインドされない場合や実行時に指定されない場合、クエリタイプのデータセットはそれらの値を DataSource プロパティに基づいて提供しようとします。DataSource は、バインドされていないパラメータの名前に一致するフィールド名を検索する対象となる別のデータセットを示します。この検索データセットは、どのような種類のデータセットでもかまいません。検索データ セットは、それを使用する詳細データセットより前に作成して、データを入力しておく必要があります。検索データセットで一致したものが見つかると、詳細データセットは、データ ソースが指す現在のレコードのフィールド値にパラメータ値をバインドします。
この動作の仕組みを説明するために、顧客テーブル(Customer)と注文テーブル(Orders)という 2 つのテーブルを考えてみましょう。顧客ごとに、注文テーブルには顧客が出した一連の注文が格納されています。顧客テーブルには、一意な顧客 ID を示す ID フィールドがあります。また、注文テーブルには、注文を出した顧客の ID を示す CustID フィールドがあります。
顧客データセットをセットアップするには:
- アプリケーションにテーブルタイプのデータセットを追加し、それを顧客テーブルにバインドします。
- CustomerSource という名前の TDataSource コンポーネントを追加します。その DataSet プロパティを、手順 1 で追加したデータセットに設定します。これで、このデータ ソースは顧客データセットを表します。
- クエリタイプのデータセットを追加し、その SQL プロパティを以下のように設定します。
-
SELECT CustID, OrderNo, SaleDate
FROM Orders
WHERE CustID = :ID
- パラメータ名がマスタ テーブル(Customer)のフィールド名と同じであることに注意してください。
-
- 詳細データセットの DataSource プロパティを CustomerSource に設定します。このプロパティを設定すると、詳細データセットはリンク クエリになります。
実行時には、詳細データセットの SQL 文内の :ID パラメータには値が割り当てられていないため、データセットは CustomersSource で指定されたデータセット内でパラメータと名前が一致する列を検索しようとします。CustomersSource は自分のデータをマスタ データセットから取得し、マスタ データセットは自分のデータを顧客テーブルから取得します。顧客テーブルには CustID という列があるため、マスタ データセットの現在のレコードに含まれている ID フィールドの値は、詳細データセットの SQL 文の :ID パラメータに割り当てられます。データセットはマスタ/詳細関係でリンクされています。顧客データセットで現在のレコードが変わるたびに、詳細データセットの SELECT 文が実行され、現在の顧客 ID を基にすべての注文が取得されます。