엠바카데로에서 FireDAC Skill Sprint 웨비나(1월 23일 ~ 3월 27일: 매주 금요일 10시)를 진행하고 있습니다.


이 글에서는 웨비나 다시보기와 함께 웨비나 일부 내용을 샘플코드와 함께 소개합니다. 하단 온라인 기술 도움말 링크를 통해 더 자세한 내용을 추가학습하시기 바랍니다.


5회차에서는 FireDAC의 캐스캐이딩 옵션에 대해 소개하고 살펴봅니다.

FireDAC 캐스캐이딩 옵션

FireDAC에는 5종류의 옵션 그룹을 제공합니다.

  • FetchOptions : DBMS에서 데이터를 어떻게 취득할지 제어하는 검색 옵션입니다.
  • FormatOptions : DBMS의 데이터형식을 FireDAC 데이터 형식으로 또는 반대로 매핑하는 방법을 제어하는 형식 옵션입니다.(자세한 내용은 "Data Type Mapping"을 참조하세요.)
  • UpdateOptions : DBMS에 업데이트 전송 방법을 제어하는 업데이트 옵션입니다. 업데이트 시 테이블의 모든 필드를 업데이트하거나 변경된 필드만 업데이트 할 수 있습니다.
  • ResourceOptions : 시스템 리소스 사용과 데이터셋의 지속성을 제어하는 자원 옵션입니다. 예를 들면 FireDAC Phys 레이어 명령을 비동기 적으로 실행 또는 차단할 수 있습니다.
  • TxOptions : 트랜젝션 실행방법을 제어하는 트랜젝션 옵션입니다. 


위의 옵션은 Manager > Connection > DataSet/Command로 캐스캐이딩(위에서 아래로 적용) 됩니다. 즉, TFDConnection에 옵션을 설정하면 해당 연결을 사용하는 TFDQuery, TFDTable도 동일한 옵션이 적용됩니다.(일부 옵션 제외)

FireDAC 카테고리 별 주요옵션

다음은 FireDAC 주요옵션을 카테고리별로 나열한 것입니다. 각 옵션에 대한 자세한 내용은 항목 아래 기술문서 링크에 방문해 상세 설명을 보시기 바랍니다.


검색옵션(FetchOptions)

  • 취득 방법 ( CursorKind , Mode , RowsetSize ). 예를 들어, 결과 세트의 모든 레코드를 한 번에 검색 할 수 주문형 레코드를 검색 할 수 있습니다. 
  • 자원 보존 방법 ( Unidirectional , AutoClose , Cache , AutoFetchAll ). 
  • BLOB 필드 중첩 된 레코드 메타 데이터 검색 및 캐시 방법 ( Items , Cache ). 
  • 마스터/디테일 데이터셋 관계의 처리 방법 ( DetailDelay , DetailOptimize , DetailCascade ). 
  • 행 집합 페이징 ( RecsMax , RecsSkip ). 
  • TFDTable 작동 모드 ( CursorKind , LiveWindowParanoic , LiveWindowFastFirst ). 
  • 데이터 집합의 레코드를 세는 방법 ( RecordCountMode ).

TFDFetchOptions 기술문서 - http://docwiki.embarcadero.com/Libraries/XE7/en/FireDAC.Stan.Option.TFDFetchOptions


형식옵션(FormatOptions)

  • 문자열 데이터 형식 ( StrsEmpty2Null , StrsTrim , StrsTrim2Len , InlineDataSize , MaxStringSize ) 
  • 숫자 데이터 형식 ( MaxBcdPrecision , MaxBcdScale , Round2Scale ) 
  • 시간 데이터 형식 ( Round2Scale ) 
  • 일반적인 데이터 형식 매핑 ( MapRules , OwnMapRules , DefaultParamDataType ). 예를 들어 NUMERIC (9, 0)의 열을 ftInteger 컬럼에 맵핑 할 수 있습니다. 
  • 필드 형식 ( FmtDisplayDateTime , FmtDisplayDate , FmtDisplayTime , FmtDisplayNumeric , FmtEditNumeric ) 
  • 데이터 집합의 정렬 ( SortLocale , SortOptions ) 
  • 식별자 따옴표 ( QuoteIdentifiers )

TFDFormatOptions 기술문서 - http://docwiki.embarcadero.com/Libraries/XE7/en/FireDAC.Stan.Option.TFDFormatOptions


업데이트옵션(UpdateOptions)

  • 데이터 편집 허용 ( EnableDelete , EnableInsert , EnableUpdate , ReadOnly , CheckRequired , CheckReadOnly , CheckUpdatable ). 여기에는 TField.ReadOnly 과 TField.Required 도 영향을줍니다. 
  • 데이터베이스 레코드 잠금 ( LockMode , LockPoint , LockWait ). 
  • 자동 증가 필드에 대한 데이터베이스 생성기와 시퀀스의 사용 ( FetchGeneratorsPoint , GeneratorName ). 여기에는 TField.AutoGenerateValue 도 영향을줍니다. 
  • 업데이트 사후 명령의 생성 ( UpdateChangedFields , UpdateNonBaseFields , UpdateMode , FastUpdates ). 여기에는 TField.ProviderFlags 과 TField.Origin 도 영향을줍니다. 
  • 데이터의 업데이트 ( RefreshMode , RefreshDelete ). 
  • 업데이트 포스트 결과 확인 ( CountUpdatedRecords ).

TFDUpdateOptions 기술문서 - http://docwiki.embarcadero.com/Libraries/XE7/en/FireDAC.Stan.Option.TFDUpdateOptions


리소스옵션(ResourceOptions)

  • SQL 명령 텍스트 전처리 ( EscapeExpand , MacroCreate , MacroExpand , ParamCreate , ParamExpand , PreprocessCmdText , UnifyParams ). 
  • 명령의 준비 ( DirectExecute , DefaultParamType ). 
  • 명령 실행 ( CmdExecMode , CmdExecTimeout , ArrayDMLSize ). 
  • 자원 관리 ( SilentMode ). 
  • 데이터 집합 지속성 ( Persistent , Backup , BackupExt , BackupFolder , DefaultStoreExt , DefaultStoreFolder , DefaultStoreFormat , StoreVersion , StoreItems ).

TFDResourceOptions 기술문서 - http://docwiki.embarcadero.com/Libraries/XE7/en/FireDAC.Stan.Option.TFDResourceOptions


트랜젝션옵션(TxOptions)

  • 독점적 수준 ( Isolation ) 
  • 업데이트 기능 ( ReadOnly ) 
  • 자동 커밋 ( AutoCommit , AutoStart , AutoStop , StopOptions ) 
  • DBMS 고유의 파라미터 ( Params ) 
  • 액션 연결 해제 ( DisconnectAction ) 중첩 ( EnableNested )

TFDTxOptions 기술문서 - http://docwiki.embarcadero.com/Libraries/XE7/en/FireDAC.Stan.Option.TFDTxOptions

FireDAC 옵션 샘플프로그램

이 샘플에서는 FetchOptions을 이용해 아래 3가지 기능을 구현했습니다.

  • 테이블에 데이터가 많은 경우 신속하게 화면에 표시하기 위해 데이터를 나눠서 가져오기(FetchOptions.RowsetSize, FetchOptions.Mode 이용)
  • 데이터를 페이징 단위(중간의 데이터 만)로 조회(FetchOptions.RecsSkip, RecsMax 이용)
  • 마스터/디테일 형식의 화면에서 키보드로 목록을 빠르게 움직여도 마지막에 위치한 상세정보만 표시해 불필요한 데이터 조회 방지(FetchOptions.DetailDealy 이용)

[샘플코드 받기 - 데브기어 github 페이지]


데이터를 지정건수 만큼 나눠서 가져오는 기능
데이터가 많은 경우 전체 데이터를 가져와 화면에 표시하는 것 보다 부분적으로 표시하고 추가로 데이터를 표시하는 것이 효과적일 수 있습니다.
FireDAC에서는 FetchOption의 Mode와 RowsetSize를 설정해 해당 기능을 구현할 수 있습니다. 다음 데이터목록을 가져오려면 TFDQuery.FetchNext 메소드를 호출합니다.
1
2
3
4
5
6
7
8
9
10
11
12
qryEmployee.Close;
if TCheckBox(Sender).Checked then
begin
  qryEmployee.FetchOptions.RowsetSize := 3;
  qryEmployee.FetchOptions.Mode := TFDFetchMode.fmManual;
end
else
begin
  qryEmployee.FetchOptions.Mode := TFDFetchMode.fmOnDemand;
end;
qryEmployee.Open;
btnFetchNext.Enabled := TCheckBox(Sender).Checked;

데이터 페이징 단위로 조회 기능
페이징 단위로 데이터를 조회할 수 있습니다. DBMS 자체에서 Top, Limit 명령을 통해 쿼리로 수행하던 기능을 FireDAC 컴포넌트로 구현할 수 있습니다.
1
2
3
4
qryEmployee.Close;
qryEmployee.FetchOptions.RecsSkip := 10;
qryEmployee.FetchOptions.RecsMax := 10;
qryEmployee.Open;

상세 데이터 조회지연 기능 구현
사원정보(qryEmployee)와 사원이 진행한 프로젝트(qryProject)로 목록/상세 기능 구현 후 체크박스(chkFetchRowsetSize) 체크 시 DetailDelay 옵션으로 지연 조회 하도록 설정
1
2
3
4
if TCheckBox(Sender).Checked then
  qryProject.FetchOptions.DetailDelay := StrToIntDef(Edit1.Text, 300)
else
  qryProject.FetchOptions.DetailDelay := 0;

관련 링크


FireDAC Skill Sprints 관련 글


번호 제목 글쓴이 날짜 조회 수
공지 [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) 관리자 2021.01.19 15442
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13962
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 16499
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 22055
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 23268
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 18923
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 39257
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 174713
783 기존 시스템을 웹(Web)으로 확장하기 위해 고려해야 할 두 가지 포인트 관리자 2018.06.11 1383
782 개발자가 고민하는 마이그레이션 논쟁 해소를 위한 7가지 핵심 방안 관리자 2018.02.19 1381
781 인터베이스(Interbase) 에디션 안내 file 험프리 2016.08.25 1381
780 [XE8] 버전 컨트롤 시스템 IDE 통합(Mercurial 지원) [1] Humphery 2015.04.15 1376
779 RAD 스튜디오 10.3.1에서 FCM 수신 설정하기 [5] 험프리 2019.06.10 1373
778 [고객 사례- 델파이, 모바일, 전략] 축구 전술 기획 앱 - Soccer Playview 관리자 2021.08.20 1369
777 C++에서 LINQ 사용 file 험프리 2018.05.09 1368
776 TCategoryButtons 동적 생성하고, TButtonItem 클릭 이벤트 연결하기 file 험프리 2016.03.23 1366
775 엔터프라이즈 커넥터로 '구글 드라이브 VCL 애플리케이션' 만들기 file 관리자 2017.09.29 1364
774 [10.3 리오][업데이트1] VCL, FMX용 새로운 스타일 15종 지원 관리자 2019.02.22 1354
773 [따라하기] 도서대여 프로그램 만들기 - 6, 통합테스트 file 험프리 2017.02.02 1349
772 [다음 버전 정보] 멀티-디바이스 미리보기 창 관리자 2015.03.19 1347
771 TTS(Text-to-Speech) 라이브러리(윈도우, 맥OS, iOS, 안드로이드) [2] 험프리 2017.10.30 1338
770 [RAD서버] [웨비나-딥다이브] 매장 관리 솔루션 개발하기(개발 시나리오와 데모) file 험프리 2016.11.02 1318
769 C++로 UI를 손쉽게 개발해봅시다! 관리자 2020.04.07 1317
768 코드 아카데미: 세션4. 푸쉬알림 (2014.8.19) 관리자 2014.08.20 1316
767 모바일 도서 특강 자료 file Humphery 2014.12.05 1311
766 [광주 세미나 발표자료] RAD Studio XE7 Direct, LIVE! 관리자 2014.09.30 1311
» [FireDAC Skill Sprints] 5. Cascading Options: 고급기능을 활용 할 수 있는 FireDAC 옵션 Humphery 2015.03.11 1311
764 [시애틀][VCL] 고해상도 모니터(4K 모니터와)와 멀티 모니터(모니터 당 DPI)를 지원합니다. [1] Humphery 2015.10.05 1303