2008-09-21 4 views
1

하나 이상의 테이블에있는 둘 이상의 쿼리의 결과를 TClientDataset에 넣을 수 있습니까? 나는 한 번에 두 개 이상의 테이블에서 결과를 가져 오도록 데이터 공급자 (SetProvider)를 얻을 수있는 방법을 알아낼 수 없습니다TClientDataset의 여러 테이블?

SELECT * from t1; 
SELECT * from t2; 
SELECT * from t3; 

같은

그냥 뭔가.

답변

0

참조하는 것처럼 동일한 TClientDataSet에 여러 테이블 데이터를 포함 할 방법이 없습니다. TClientDataSet은 단일 데이터 세트에 대해 단일 커서를 보유합니다.

4

유일한 방법은 테이블을 조인하는 것입니다. 그러나 조인 된 외부 키를 통해 조인 기준을 제공해야합니다.

select * from t1, t2, t3 where t1.key = t2.key and t2.key = t3.key; 

이제는 이러한 조인을 허용하는 키 (예 : LineNr)가 있다고 가정합니다. 그런 다음 전체 외부 조인을 사용하여 모든 레코드를 포함 할 수 있습니다 (모든 테이블의 행 수가 동일한 경우 중요). 그러나 이것은 어떻게 든 해킹이 될 것입니다. 키를 재사용하지 않으므로 번호에 auto_number를 사용하지 않도록하십시오. 번호 매기기에 구멍이 남기 쉽기 때문에 값이 부분적으로 만 채워지는 많은 행이 생깁니다.

동일한 필드 집합이있는 여러 테이블에서 클라이언트 데이터를 채우려면 UNION 연산자를 사용하면됩니다. 이렇게하면 동일한 열을 사용하고 모든 행을 하나의 테이블로 결합합니다.

12

ClientDatasets은 다른 데이터 세트 인 필드를 포함 할 수 있습니다. 따라서 단일 데이터 세트에 세 개의 테이블을 만들려면 원하는 세 개의 결과 세트가있는 세 개의 ClientDatasets을 만든 다음 단일 ClientDataSet에 넣을 수 있습니다.

이 문서 :

http://dn.codegear.com/article/29001

실행시 및 디자인 타임에 모두 그것을 할 방법을 보여줍니다.

+0

이 다른 기사를 "TFields를 사용하여 런타임에 ClientDataSet's 구조 만들기"도 참조해야합니다 : http://edn.embarcadero.com/article/29825라는 제목의 섹션에 특히주의 – EMBarbosa