別のデータセットの詳細としてのテーブルの設定
マスタ/詳細関係の作成 への移動
テーブルを表すデータセットの MasterSource プロパティと MasterFields プロパティを使用して、2 つのデータセットの間に 1 対多の関係を作成することができます。
MasterSource プロパティは、テーブルがマスタ テーブルのデータを取得する元となる、データ ソースを指定するために使用します。このデータ ソースは、任意の種類のデータセットにリンクすることができます。たとえば、クエリのデータ ソースをこのプロパティに指定すると、クライアント データセットをクエリの詳細としてリンクでき、クエリで発生するイベントをクライアント データセットが追跡できるようになります。
データセットは、現在のインデックスに基づいてマスタ テーブルにリンクされます。詳細データセットによって追跡するマスタ データセットのフィールドを指定する前に、まず、詳細データセット内の、対応するフィールドから始まるインデックスを指定します。これには、IndexName プロパティまたは IndexFieldNames プロパティを使用できます。
使用するインデックスを指定したら、MasterFields プロパティを使用して、詳細テーブルのインデックス フィールドに対応する、マスタ データセット内の列を指定します。複数の列名でデータセットをリンクするには、セミコロンで区切ってフィールド名を指定します。
Parts.MasterFields := 'OrderNo;ItemNo';
Parts->MasterFields = "OrderNo;ItemNo";
2 つのデータセットの間に意味のあるリンクを作成するには、[リンク フィールドの設計]を使用できます。[リンク フィールドの設計]を使用するには、MasterFields とインデックスを割り当ててから、[オブジェクト インスペクタ]内の MasterSource プロパティをダブルクリックします。
以下では、ユーザーが顧客レコードをスクロールして選択した顧客の注文をすべて表示できる、簡単なフォームを作成します。マスタ テーブルは CustomersTable、詳細テーブルは OrdersTable です。この例では BDE の TTable コンポーネントを使用していますが、どの種類のテーブル用データセットにリンクする場合でも、メソッドは同じものを使用できます。
単純なフォームを作成するには:
- データ モジュールに 2 つの TTable コンポーネントと 2 つの TDataSource コンポーネントを配置します。
- コンポーネントのプロパティを以下のように設定します。
コンポーネント | プロパティ |
---|---|
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 |
- フォームに 2 つの TDBGrid コンポーネントを配置します。
- [ファイル|使用するユニット...] を選択して、フォームでデータ モジュールを使用するよう指定します。
- 1 番目のグリッド コンポーネントの DataSource プロパティを "CustSource" に、2 番目のグリッド コンポーネントの DataSource プロパティを "OrdersSource" に設定します。
- OrdersTable の MasterSource プロパティを "CustSource" に設定します。これで、CUSTOMER テーブル(マスタ テーブル)が ORDERS テーブル(詳細テーブル)にリンクされます。
- [オブジェクト インスペクタ]で MasterFields プロパティの値の列をダブルクリックし、[リンク フィールドの設計]を開いて以下のプロパティを設定します。
- [選択可能なインデックス]のフィールドで CustNo を選択し、この CustNo フィールドによって 2 つのテーブルをリンクします。
- [詳細フィールド]と[マスタ フィールド]のフィールド リストの両方で CustNo を選択します。
- [追加]ボタンをクリックして、この結合条件を追加します。[結合されるフィールド]のリストに "CustNo -> CustNo" と表示されます。
- [OK]をクリックすると、選択した内容が反映され、[リンク フィールドの設計]が閉じます。
- CustomersTable と OrdersTable の Active プロパティを True に設定して、フォーム上のグリッドにデータを表示します。
- アプリケーションをコンパイルして実行します。
ここでアプリケーションを実行すると、2 つのテーブルがリンクしていることがわかります。また、CUSTOMER テーブル内で新しいレコードに移動すると、ORDERS テーブル内のその顧客に属するレコードだけが表示されます。
関連項目
- ネストした詳細テーブルの使用
- Data.Win.ADODB.TADOTable.MasterSource
- Datasnap.DBClient.TCustomClientDataSet.MasterSource
- Bde.DBTables.TTable.MasterSource
- IBX.IBTable.TIBTable.MasterSource
- Data.SqlExpr.TSQLTable.MasterSource
- Data.Win.ADODB.TCustomADODataSet.MasterFields
- Datasnap.DBClient.TCustomClientDataSet.MasterFields
- Bde.DBTables.TTable.MasterFields
- IBX.IBTable.TIBTable.MasterFields
- Data.SqlExpr.TSQLTable.MasterFields