別のデータセットの詳細としてのテーブルの設定

提供: RAD Studio
移動先: 案内検索

マスタ/詳細関係の作成 への移動


テーブルを表すデータセットの MasterSource プロパティと MasterFields プロパティを使用して、2 つのデータセットの間に 1 対多の関係を作成することができます。

MasterSource プロパティは、テーブルがマスタ テーブルのデータを取得する元となる、データ ソースを指定するために使用します。このデータ ソースは、任意の種類のデータセットにリンクすることができます。たとえば、クエリのデータ ソースをこのプロパティに指定すると、クライアント データセットをクエリの詳細としてリンクでき、クエリで発生するイベントをクライアント データセットが追跡できるようになります。

データセットは、現在のインデックスに基づいてマスタ テーブルにリンクされます。詳細データセットによって追跡するマスタ データセットのフィールドを指定する前に、まず、詳細データセット内の、対応するフィールドから始まるインデックスを指定します。これには、IndexName プロパティまたは IndexFieldNames プロパティを使用できます。

使用するインデックスを指定したら、MasterFields プロパティを使用して、詳細テーブルのインデックス フィールドに対応する、マスタ データセット内の列を指定します。複数の列名でデータセットをリンクするには、セミコロンで区切ってフィールド名を指定します。

Parts.MasterFields := 'OrderNo;ItemNo';
Parts->MasterFields = "OrderNo;ItemNo";

2 つのデータセットの間に意味のあるリンクを作成するには、[リンク フィールドの設計]を使用できます。[リンク フィールドの設計]を使用するには、MasterFields とインデックスを割り当ててから、[オブジェクト インスペクタ]内の MasterSource プロパティをダブルクリックします。

以下では、ユーザーが顧客レコードをスクロールして選択した顧客の注文をすべて表示できる、簡単なフォームを作成します。マスタ テーブルは CustomersTable、詳細テーブルは OrdersTable です。この例では BDE の TTable コンポーネントを使用していますが、どの種類のテーブル用データセットにリンクする場合でも、メソッドは同じものを使用できます。

単純なフォームを作成するには:

  1. データ モジュールに 2 つの TTable コンポーネントと 2 つの TDataSource コンポーネントを配置します。
  2. コンポーネントのプロパティを以下のように設定します。
コンポーネント プロパティ

1 番目の TTable

DatabaseName: DBDEMOS、TableName: CUSTOMER、Name: CustomersTable

2 番目の TTable

DatabaseName: DBDEMOS、TableName: ORDERS、Name: OrdersTable

1 番目の TDataSource

Name: CustSource、DataSet: CustomersTable

2 番目の TDataSource

Name: OrdersSource、DataSet: OrdersTable

  1. フォームに 2 つの TDBGrid コンポーネントを配置します。
  2. [ファイル|使用するユニット...] を選択して、フォームでデータ モジュールを使用するよう指定します。
  3. 1 番目のグリッド コンポーネントの DataSource プロパティを "CustSource" に、2 番目のグリッド コンポーネントの DataSource プロパティを "OrdersSource" に設定します。
  4. OrdersTableMasterSource プロパティを "CustSource" に設定します。これで、CUSTOMER テーブル(マスタ テーブル)が ORDERS テーブル(詳細テーブル)にリンクされます。
  5. [オブジェクト インスペクタ]MasterFields プロパティの値の列をダブルクリックし、[リンク フィールドの設計]を開いて以下のプロパティを設定します。
    • [選択可能なインデックス]のフィールドで CustNo を選択し、この CustNo フィールドによって 2 つのテーブルをリンクします。
    • [詳細フィールド]と[マスタ フィールド]のフィールド リストの両方で CustNo を選択します。
    • [追加]ボタンをクリックして、この結合条件を追加します。[結合されるフィールド]のリストに "CustNo -> CustNo" と表示されます。
    • [OK]をクリックすると、選択した内容が反映され、[リンク フィールドの設計]が閉じます。
  6. CustomersTableOrdersTableActive プロパティを True に設定して、フォーム上のグリッドにデータを表示します。
  7. アプリケーションをコンパイルして実行します。

ここでアプリケーションを実行すると、2 つのテーブルがリンクしていることがわかります。また、CUSTOMER テーブル内で新しいレコードに移動すると、ORDERS テーブル内のその顧客に属するレコードだけが表示されます。

関連項目