2012-04-22 3 views
0

는 내가 "OnQueryStatement"방법을 발견 :이 방법은 클라이언트 측 쿼리 문을 얻을 수 있습니다서버 측에서 kbmMW 클라이언트 쿼리 문을 가져 오는 방법은 무엇입니까?

procedure TkbmMWQueryService2.kbmMWQueryServiceQueryStatement(Sender: TObject; 
Place: TkbmMWQueryOperationType; var NamedQueryName, Statement: string); 
begin 
    Form1.Memo1.Lines.Add(Statement);//show the query statement 
end; 

을하지만, 모든 클라이언트 측 쿼리 트리거이 이벤트는 (스크린 샷 등) twince 왜!? 어떻게 클라이언트 - siade 쿼리 문을 올바르게 얻을 수 있습니까?

미리 감사드립니다. : 서버에 두 번 호출

p.s. Form1 is the server-side,form3 is the client-side

답변

3

그것은 (사실 가장 멀리 상황에서 서버의 동일한 쿼리에 대해 3 번 호출 할 수 있습니다.)

확인 그것에서 호출 된 상황에 장소 인수. 그것은 mwqotDefinition, mwqotQuery, mwqotExecute, mwqotResolve, mwqotMoreData, mwqotMetaData

쿼리를 열 때 그 여러 번 호출되는 이유가 될 수 있다는 것입니다 데이터 집합은 먼저 정의 (이 쿼리에서 어떤 필드와 매개 변수가 생성되는지)를 얻은 다음 데이터 자체를 얻는 것을 좋아합니다.

서버와 클라이언트 모두 기본값으로 작동합니다. 따라서 클라이언트에서 쿼리를 열면 클라이언트가 서버에 정의를 묻는 메시지를 표시 한 다음 클라이언트가 데이터를 요청하고 서버에서 정의를 요구 한 다음 데이터를 요구할 수 있습니다. 서버는 상태를 저장하지 않으며 기본값은 이전 호출에 대해 아무것도 알지 못합니다.

  • 하는 메타 데이터 (정의)에 대한 캐싱을 사용 :

    이를 최적화하는 방법에는 여러 가지가 있습니다. 이렇게하면 캐시 결과가 서버에 정의 대신 데이터베이스에 요청되고 클라이언트에서 캐시를 사용하도록 설정되므로 클라이언트는 서버에 처음으로 정의를 요구하지 않아도됩니다.

  • 쿼리의 AutoFieldDefs 속성을 mwafoWithData에 설정합니다. 그러면 데이터는 실제로 정의와 동시에 반환되고 2.nd 데이터 가져 오기 호출은 건너 뜁니다.

+0

Kim Madsen, 대단히 감사합니다! –