자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Delphi FireDAC사용 쿼리하는 동안 진행중 표시 어떻게..?
2018.10.01 22:22
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
데브기어를 통해 많은 공부를 하고 있습니다.
질문과 답변을 달아주신 모든분께 감사드립니다.
한가지 질문을 하려 합니다.
메인폼에서 FDConnection, FDQuery를 올리고 여러 Child폼에서 쿼리를 합니다.
시간이 오래걸리는 쿼리(insert, update, open등)시 진행중 이라는걸 표시해 주고 끝나면 없어지도록
구현하고자 합니다.
기본으로 마우스 포인트가 모래시계Sql이 나타났다가 없어지지만 대신에 움직이는 (뱅글뱅글 도는...등)
모양을 주고 싶습니다.
지금껏 해본것은
메인폼에 움직이는 ProgressBar(이하 PB1)를 올리고
FDQuery 이벤트중 BeforeOpen시 PB1.Visible = True, AfterOpen시 PB1.Visible = False 해봤는데
보여지기는 하나 쿼리중 옴직이질 않습니다.
(혹시나 해서 쓰레드도 사용) 아래
procedure TfrmMain.FDQuery1BeforeOpen(DataSet: TDataSet);
begin
TThread.CreateAnonymousThread(procedure ()
begin
TThread.Synchronize(nil, procedure
begin
Panel10.Visible := True;
AdvWiiProgressBar1.Enabled := True;
end);
end).Start;
end;
procedure TfrmMain.FDQuery1AfterOpen(DataSet: TDataSet);
begin
TThread.CreateAnonymousThread(procedure ()
begin
TThread.Synchronize(nil, procedure
begin
AdvWiiProgressBar1.Enabled := False;
Panel10.Visible := False;
end);
end).Start;
end;
어떻게 하면 좋을까요..? 한 수 배우고자 합니다.
감사합니다.
Delphi FireDAC사용 쿼리하는 동안 진행중 표시 어떻게..?
2018.10.01 22:22
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
데브기어를 통해 많은 공부를 하고 있습니다.
질문과 답변을 달아주신 모든분께 감사드립니다.
한가지 질문을 하려 합니다.
메인폼에서 FDConnection, FDQuery를 올리고 여러 Child폼에서 쿼리를 합니다.
시간이 오래걸리는 쿼리(insert, update, open등)시 진행중 이라는걸 표시해 주고 끝나면 없어지도록
구현하고자 합니다.
기본으로 마우스 포인트가 모래시계Sql이 나타났다가 없어지지만 대신에 움직이는 (뱅글뱅글 도는...등)
모양을 주고 싶습니다.
지금껏 해본것은
메인폼에 움직이는 ProgressBar(이하 PB1)를 올리고
FDQuery 이벤트중 BeforeOpen시 PB1.Visible = True, AfterOpen시 PB1.Visible = False 해봤는데
보여지기는 하나 쿼리중 옴직이질 않습니다.
(혹시나 해서 쓰레드도 사용) 아래
procedure TfrmMain.FDQuery1BeforeOpen(DataSet: TDataSet);
begin
TThread.CreateAnonymousThread(procedure ()
begin
TThread.Synchronize(nil, procedure
begin
Panel10.Visible := True;
AdvWiiProgressBar1.Enabled := True;
end);
end).Start;
end;
procedure TfrmMain.FDQuery1AfterOpen(DataSet: TDataSet);
begin
TThread.CreateAnonymousThread(procedure ()
begin
TThread.Synchronize(nil, procedure
begin
AdvWiiProgressBar1.Enabled := False;
Panel10.Visible := False;
end);
end).Start;
end;
어떻게 하면 좋을까요..? 한 수 배우고자 합니다.
감사합니다.
FireDAC의 TFDQuery 뿐아니라 대부분의 데이터셋들은 모두 쓰래드가 적용되지 않습니다.
그렇기 때문에 데이터를 열거나(Open) 실행(ExecSQL)할때 다른 컨트롤들이 제어되지 않습니다.
메인쓰래드 하나에서 데이터 오픈과 컨트롤 제어가 함께 이뤄집니다.
만약, 데이터를 여는 도중 컨트롤을 제어하고 싶다면 데이터 여는 작업을 쓰래드 처리해야 합니다.
다음 예제가 도움이 될 것 같습니다.
http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Multithreading_(FireDAC)
——————
답글이 도움이 되셨는지 다른 분들도 참고할 수 있도록 결과 댓글 부탁드립니다.
(결과 댓글이 없는 경우 다른 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)