Jump to content
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr ×
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr

[DocWiki 번역] GUI 화면 질문과 답변 (FireDAC)


Recommended Posts

Docwiki에 있는 "GUI Questions (FireDAC)"을 번역한 글: 번역일: 2022년 4월 18일

위로 가기: [DocWiki 번역] FAQ (FireDAC)

 

FireDAC 사용자 화면 즉 GUI 관련 질문과 답변을 정리한 목록이다.

 

Q1: 오래 걸리는 쿼리가 실행되는 동안 "Application is busy" 대화창을 표시하는 방법은?

A: FDQuery.ResourceOptions.CmdExecMode에 amCancelDialog를 지정하고, 폼 위에 TFDGUIxAsyncExecuteDialog 대화창을 올려둔 다음, 오래 걸리는 쿼리를 준비하고 실행하여 테스트하라.

쿼리가 실행되는 동안, FireDAC은 "Wait" 레이블이 보이고 "Cancel" 버튼이 들어 있는 대화창을 표시한다. 사용자가 "Cancel" 버튼을 누르면 해당 쿼리 실행이 취소된다.

 

Q2: FDGUIxLoginDialog 대화창을 현지화 하는 방법은?

A: 코드 작성을 아래와 같이 하라: 

with FDGUIxLoginDialog1.VisibleItems do begin
  Clear;
  Add('User_Name=<local phrase>');
  Add('Password=<local phrase>');
end;

또한, FireDAC.Stan.ResStrs 유닛을 열고, "Dialog captions" 섹션을 찾아서 항목을 번역을 할 수도 있다.

 

Q3: TFDGUIxErrorDialog 대화창을 사용하여 에러를 다루는 방법은?

A: 폼(form) 또는 데이터 모듈(data module) 위에 TFDGUIxErrorDialog 컴포넌트를 놓아 두어라. 그러면, 처리되지 않은(unhandled) EFDDBEngineException 예외를 다룰 수 있도록 FireDAC 에러 대화창이 표시된다. 이렇게 하기 위해, FireDAC은 TApplication.OnException 이벤트를 낚아챈다(hook).

 

Q4: SQL 모래시계(hourglass)를 완전히 꺼버리는 방법은?

A: a) 애플리케이션에서 기다림 커서 (wait cursor)를 완전히 비활성화 하려면, TFDGUIxWaitCursor에서 Provider = 'Console'로 지정하여 사용하라. 'Console' 프로바이더는 기다림 커서 (wait cursor) 구현이 비어있어서 FireDAC에서 기다림 커서 (wait cursor)를 표시하지 않는다. 만약 마우스 커거사 여전히 바뀐다면, uses 절에 오직 FireDAC.ConsoleUI.Wait 유닛 만 있는지 그리고 FireDAC.VCLUI.Wait 와 FireDAC.FMXUI.Wait가 잘 빠져있는 지를 확인하라. 이 방식에서는 당신이 기다림 커서 (wait cursor)를 다시 활성화 할 수는 없다는 점을 유의하라.

b) 기다림 커서 (wait cursor)를 비활성화 한 후에, 언젠가 다시 활성화 할 필요가 있다면 코드를 다음과 같이 작성하라:

FDWaitCursor1.ScreenCursor := gcrNone;

또는 

FDManager.ResourceOptions.SilentMode := True;

c) 기다림 커서 (wait cursor)와 FireDAC 대화창을 비활성화 한 후에, 언젠가 다시 그것들을 활성화 할 필요가 있다면, FDManager.SilentMode 프로퍼티에 True를 지정하라. 그러면 기다림 커서 (wait cursor)와 FireDAC 대화창을 비활성화이 모두 비활성화 된다. 여기에 해당되는 창은:

  • 에러 대화창
  • 비동기 실행(Async execution) 대화창
  • 로그인  대화창
  • 스크립트 진행 대화창

ResourceOptions.SilentMode에 True를 지정하면 오직  기다림 커서 (wait cursor)만 비활성화 된다.

 

Q5: 데이터셋(dataset)에 필터(filter)를 적용했는데, 그리드(grid)의 스크롤 바가 변하지 않고 그대로 이다. 왜 그런가?

Q: FDDataSet에 연결되 그리드(grid)가 있는데 아래와 같이 레코드를 필터링했다:

Grid.DataSource.Dataset.Filter := 'id_virtual_channel in (1, 2, 3)'

모든 것이 잘 되었지만, 그리드의 스크롤 바가 변하지 않고 그대로 있어서 마치 필터가 적용되지 않고 여전히 전체 행(row) 있는 것처럼 보인다. 상당히 좋지 않은데, 예를 들면 그리드에 있는 행(row)의 전체 갯수가 500개 이고, 필터링을 하여 3개만 보여주는데도 그리드의 스크롤 바는 여전히500개 일때와 동일하게 매우 작아서 아주 조금만 움직일 수 있다 (마치 필터링 후에도 여전히 결과는 500개이고 단지 화면에서 3개만 보여주고 있는 것처럼 느끼게 된다). 해결책이 있나?

 

A: 코드 작성을 아래와 같이 하라: 

FDQuery1.FetchOptions.RecordCountMode := cmVisible;

 

Q6: 데이터셋(dataset)을 새로고침(refresh)하고 나면, DBGrid에서 선택되어 있던 행 여러개가 모두 선택 해제되어 버린다. 선택을 유지하는 방법은?

A: Refresh가 호출되고 나면 FireDAC 북마크(bookmark)가 무효화된다. Refresh를 호출하기 전에 선택된 레코드들의 PK 값을 저장해 두었다가 Locate 메소드를 사용하여 해당 레코드들을 다시 선택되도록 하라.

이 댓글 링크
다른 사이트에 공유하기

이 토의에 참여하세요

지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.

Guest
이 토픽(기고/질문)에 답하기

×   서식있는 텍스트로 붙여넣기.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   이전에 작성한 콘텐츠가 복원되었습니다..   편집창 비우기

×   You cannot paste images directly. Upload or insert images from URL.

 공유하기

×
×
  • Create New...

중요한 정보

이용약관 개인정보보호정책 이용규칙 이 사이트가 더 잘 작동하기 위해 방문자의 컴퓨터에 쿠키가 배치됩니다. 쿠키 설정 변경에서 원하는 설정을 할 수 있습니다. 변경하지 않으면 쿠키를 허용하는 것으로 이해합니다.