2009-12-07 5 views
2

제 질문은 매우 간단합니다. TDataSetProvider를 통해 TADOQuery에 연결된 TClientDataSet가 있습니다. TADOQuery의 TClientDataSet에 데이터를 넣을 수는 있지만 TClientDataSet의 데이터를 TADOQuery로 다시 가져 오는 방법은 무엇입니까?TADOQuery를 사용하여 TClientDataSet 쿼리하기

쿼리를 실행 한 다음 TClientDataSet의 활성 속성을 True로 설정하면 데이터가 자동으로 TADOQuery에서 TClientDataSet으로 전송되지만 TADOQuery를 비활성화 한 다음 다시 활성화하면 어떻게 데이터를 다시 가져올 수 있습니까? TClientDataSet?

여러 데이터베이스에서 동일한 쿼리를 실행하고 TClientDataSet을 사용하여 결과를 연결합니다. 이것은 잘 작동합니다. 이제 내 문제는 TClientDataSet에서 TADOQuery로 연결된 결과 집합을 다시 가져 와서 호환성 이유로 TADOQuery의 SaveToFile 프로 시저를 사용할 수 있어야한다는 것입니다. 어떻게해야합니까?

답변

0

이제 막 살펴 보았습니다. 내 응용 프로그램에서는 사용자가 데이터베이스를 쿼리하여 보고서를 생성 할 수 있습니다. 이 작업을 수행 할 수 있고 작은 결과 집합에 대해서는 매우 효율적입니다. 그러나 이것이보고 응용 프로그램이기 때문에 수십만 개의 레코드를 반환 할 가능성이 있습니다. ClientDataSet을 사용하면 엄청난 성능 문제가 발생할 수 있습니다. 약 50,000 건 이상의 레코드 (합리적, 고객 기반)를 얻게되면 기하 급수적으로 처리가 증가하기 시작합니다. 따라서 이제는 기본적으로 문제가됩니다.

+0

MidasSpeedFix 및 FastMM4를 사용해 보셨습니까? http://andy.jgknet.de/blog/?p=437 또한 변경 사항을 다시 데이터베이스에 기록 할 필요가 없으면 변경 로그를 해제하면 성능이 상당히 향상됩니다. – RichardS

+0

예. 그것을 시도했다. 내가 틀린 일을하지 않는다면, 그것은 처리 시간과 별 차이가 없다. 현재 TADOQuery는 450,000 개의 레코드를 반환하고 4 분 이내에 파일에 저장하는 쿼리를 실행할 수 있습니다. TClientDataSet 처리는 30 분 넘게 진행되어 테스트 애플리케이션을 종료해야했습니다. 필요한 결과를 얻으려면 기존의 처리 및 XML 문서 (ADOQuery.SaveToFile) 구문 분석을 유지하고 데이터를 수동으로 연결합니다. – Jeedee

0

dbExpress를 사용할 때 TADOQuery를 사용하지 않지만 동일한 기술을 사용해야한다고 생각합니다. 변경 사항을 TClientDataSet에 게시 한 후 'ApplyUpdates (0)'를 호출하면 클라이언트 데이터 세트에서 해당 공급자로 데이터가 전송됩니다.

+0

아쉽게도 작동하지 않습니다. 나에게 오류를주지 않았지만 TADOQuery (업데이트 전과 동일한 레코드)를 업데이트하지 않은 ApplyUpdates를 호출 해 보았습니다. DataSetProvider (ClientDataSet과 ADOQuery 사이)를 업데이트하는 중이라는 것을 알았 기 때문에 ApplyUpdates도 호출하려고했습니다. 이것은 나에게 오류 ("Missing Connection or ConnectionString")를 주었다. 그런 다음 ADOQuery의 연결 문자열을 "Provider = MSDAOSP.1; Persist Security Info = False"로 설정하고 다시 시도했지만 다른 오류가 발생했습니다 ("개체 또는 공급자가 요청한 작업을 수행 할 수 없음"). – Jeedee

0

항상 임시 테이블에 데이터 집합을 다시 쓰고 쿼리 할 수 ​​있습니다. 아야!!

+0

사실, 좋은 것입니다. 생각. 보고 응용 프로그램이 많으므로 좋은 접근 방법으로 간주됩니다. – Pmax

관련 문제