2014-10-09 4 views
1

Firedac 구성 요소와 함께 Delphi XE2를 사용하고 있습니다. 나는 이상한 문제가있다. 일부 데이터를 검색하기 위해 자체 Firedac TQuery 구성 요소를 사용하는 사용자 지정 구성 요소가 있습니다. 이상한 점은 쿼리를 연 후 쿼리가 아직 활성화되지 않았다는 것입니다.Delphi Firedac : 열린 TFDQuery를 기다립니다.

qry.Open; 
ShowMessage(BoolToString(qry.Active,True); 
FunctionToDoAfter(SilentMode); 

코드의 해당 부분은 메시지에 '거짓'이 있습니다. 그것은 TQuery.Open 메서드가 어떤 스레드를 실행하여 여는 것을 의미합니다. FunctionToDoAfter를 실행하기 전에 누군가가 pls에게 조언 할 수 있습니까? 어떻게 쿼리를 열어 볼 수 있습니까?

안부, 표트르

+0

양식에 TADGUIxWaitCursor가 있습니까? 그렇지 않다면 추가하려고 했습니까? – MartynA

+1

'ResourceOptions.CmdExecMode' 속성의 값을 변경 했습니까? (방금 비동기식 모드로 전환했습니다)? – TLama

+0

MartynA - 응용 프로그램에 * WaitCursor 구성 요소가 있습니다. CustomComponent에는 없지만 일부를 추가하지 않았습니다. – Quasik

답변

1

TLama - 10 점 샷, 덕분이었다. 몇 달 전에 amAsync 모드를 추가했습니다. 그런 다음 모든 기능을 실현하지 못했습니다.

이제는 help site here을 한 번 더 읽고 'while'루프가있는 예제에서 내 질문에 대한 정확한 대답이 있습니다.

저는 stackoverlflow에서 새로운 제품입니다. TLama를 어떻게 갚을 수 있습니까? Frazz의 sugestion에 따라 :)

편집 한

당신은 구원을 몇 내 시간, 내가 위에 링크 된 소스 페이지에서 일부 정보를 복사하려고합니다.

FireDac에는 4 가지 명령 실행 모드가 있습니다. FDQuery1.ResourceOptions.CmdExecMode에서 변경할 수 있습니다. FdQuery1.ResourceOptions.CmdExecTimeout에서 명령을 실행하기위한 시간 제한을 설정할 수도 있습니다.

CmdExecModes은 다음과 같습니다

amBlocking - 작업이 완료 될 때까지 호출 스레드와 GUI가 차단됩니다.

amNonBlocking - 호출 스레드는 작업이 완료 될 때까지 차단됩니다. GUI는 차단되지 않습니다.

amCancelDialog - 작업이 완료 될 때까지 호출 스레드와 GUI가 차단됩니다. FireDAC은 작업을 취소 할 수있는 대화 상자를 표시합니다.

amAsync - 호출 스레드 및 GUI가 차단되지 않습니다. 호출 된 메서드는 즉시 반환됩니다. 명령은 명령 상태를 확인하여, 실행하는 동안 당신은 기다릴 수

:

FDQuery1.ResourceOptions.CmdExecMode := amAsync; 
FDQuery1.Open; 
    while FDQuery1.Command.State = csExecuting do begin 
    // do something while query is executing 
end; 

6 개 개의 명령 상태가 : csInactive, csPrepared, csExecuting, csOpen, csFetching, csAborting가.

+0

당신이 처음이므로, 조언을 해드릴 것입니다. 마찬가지로이 답변은 다른 사람들에게 거의 사용되지 않으므로 삭제 될 것입니다. 다른 사용자가 솔루션을보고 답변을 수락 할 수 있도록이 답변에 직접 링크 된 사이트의 관련 정보를 포함하십시오 (시간이 지날수록 링크가 깨집니다). – Frazz