複数のテーブルに対する複数のクエリの結果を TClientDataset に入れることはできますか?
ちょうど何か
SELECT * from t1;
SELECT * from t2;
SELECT * from t3;
一度に複数のテーブルから結果を取得するデータ プロバイダー (SetProvider) を取得する方法がわかりません。
複数のテーブルに対する複数のクエリの結果を TClientDataset に入れることはできますか?
ちょうど何か
SELECT * from t1;
SELECT * from t2;
SELECT * from t3;
一度に複数のテーブルから結果を取得するデータ プロバイダー (SetProvider) を取得する方法がわかりません。
ClientDatasets
それ自体が他のデータセットであるフィールドを含めることができます。したがって、1つのデータセットに3つのテーブルを作成する場合は、必要な3ClientDatasets
つの結果セットを保持する3つのテーブルを作成してから、それらを1つのに配置できますClientDataSet
。
この記事:
http://dn.codegear.com/article/29001
実行時と設計時の両方でそれを行う方法を示します。次のタイトルのセクションに特に注意してください。
ClientDataSet's
「を使用した実行時の構造の作成TFields
」
唯一の方法は、テーブルを結合することです。ただし、結合された外部キーを介して結合の基準を提供する必要があります。
select * from t1, t2, t3 where t1.key = t2.key and t2.key = t3.key;
ここで、そのような結合を可能にするキー (LineNr など) を考え出したとします。次に、完全外部結合を使用してすべてのレコードを含めることができます (すべてのテーブルの行数が同じではない場合に重要です)。しかし、これはどういうわけかハックになります。キーに auto_number を使用しないように注意してください。これは、キーを再利用しないため、番号付けに穴が残る傾向があり、値が部分的にしか入力されていない行が多くなる傾向があります。
同じフィールド セットを持つ複数のテーブルから clientdataset を作成する場合は、UNION 演算子を使用してこれを行うことができます。これは同じ列を使用し、すべての行を 1 つのテーブルに結合します。
参照したように、同じ TClientDataSet に複数のテーブル データを含める方法はありません。TClientDataSet は、1 つのデータセットに対して 1 つのカーソルを保持します。