하나 이상의 테이블에있는 둘 이상의 쿼리의 결과를 TClientDataset에 넣을 수 있습니까? 나는 한 번에 두 개 이상의 테이블에서 결과를 가져 오도록 데이터 공급자 (SetProvider)를 얻을 수있는 방법을 알아낼 수 없습니다TClientDataset의 여러 테이블?
SELECT * from t1;
SELECT * from t2;
SELECT * from t3;
같은
그냥 뭔가.
하나 이상의 테이블에있는 둘 이상의 쿼리의 결과를 TClientDataset에 넣을 수 있습니까? 나는 한 번에 두 개 이상의 테이블에서 결과를 가져 오도록 데이터 공급자 (SetProvider)를 얻을 수있는 방법을 알아낼 수 없습니다TClientDataset의 여러 테이블?
SELECT * from t1;
SELECT * from t2;
SELECT * from t3;
같은
그냥 뭔가.
참조하는 것처럼 동일한 TClientDataSet에 여러 테이블 데이터를 포함 할 방법이 없습니다. TClientDataSet은 단일 데이터 세트에 대해 단일 커서를 보유합니다.
유일한 방법은 테이블을 조인하는 것입니다. 그러나 조인 된 외부 키를 통해 조인 기준을 제공해야합니다.
select * from t1, t2, t3 where t1.key = t2.key and t2.key = t3.key;
이제는 이러한 조인을 허용하는 키 (예 : LineNr)가 있다고 가정합니다. 그런 다음 전체 외부 조인을 사용하여 모든 레코드를 포함 할 수 있습니다 (모든 테이블의 행 수가 동일한 경우 중요). 그러나 이것은 어떻게 든 해킹이 될 것입니다. 키를 재사용하지 않으므로 번호에 auto_number를 사용하지 않도록하십시오. 번호 매기기에 구멍이 남기 쉽기 때문에 값이 부분적으로 만 채워지는 많은 행이 생깁니다.
동일한 필드 집합이있는 여러 테이블에서 클라이언트 데이터를 채우려면 UNION 연산자를 사용하면됩니다. 이렇게하면 동일한 열을 사용하고 모든 행을 하나의 테이블로 결합합니다.
ClientDatasets
은 다른 데이터 세트 인 필드를 포함 할 수 있습니다. 따라서 단일 데이터 세트에 세 개의 테이블을 만들려면 원하는 세 개의 결과 세트가있는 세 개의 ClientDatasets
을 만든 다음 단일 ClientDataSet
에 넣을 수 있습니다.
이 문서 :
http://dn.codegear.com/article/29001
실행시 및 디자인 타임에 모두 그것을 할 방법을 보여줍니다.
이 다른 기사를 "
TFields
를 사용하여 런타임에ClientDataSet's
구조 만들기"도 참조해야합니다 : http://edn.embarcadero.com/article/29825라는 제목의 섹션에 특히주의 – EMBarbosa