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


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


8회차에서는 메모리 기반 데이터셋인 TFDMemTable에 대해 알아봅니다.

TFDMemTable(메모리테이블) 은?

TFDMemTable은 메모리 기반 데이터셋입니다. 즉, 데이터베이스 연결 없이 파일 데이터나 코드로 추가한 데이터를 메모리에 올려 데이터셋의 기능(필터링, 정렬 등)을 사용할 수 있습니다.


TFDMemTable은 아래 기능을 할 수 있습니다.

  • 디자인타임과 런타임 시 파일 불러오기(Load File), 파일로 내보내기(Save File), 다른 데이터셋의 데이터가져오기(Assign Data) 기능 사용
  • 런타임 시 파일과 스트림으로 데이터 내보내기, 불러오기 기능을 사용할 수 있으며, JSON, XML, Binary 포맷 선택 가능
  • 멀티티어 애플리케이션(REST 클라이언트, 데이터스냅 등)에서 수신 데이터를 보관하는 데이터셋 역할
  • 내부에서 데이터 보관할 시 컬랙션객체(TList, TStringList) 대신 메모리테이블 사용 시 데이터셋의 기능(UI 컨트롤에 데이터바인딩, Local SQL, 필터링, 정렬 등)을 사용해 다양한 기능 손쉽게 구현가능
  • Local SQL을 이용해 메모리테이블(데이터셋)에서 쿼리 실행
  • ETL 기능으로 다른 데이터소스(텍스트, CSV 등)에서 가져온 데이터 보관

파일 내보내기, 불러오기 기능 구현하기


메모리테이블의 데이터를 파일로 내보내거나 불러오기 위해서는 아래와 같이 메소드를 호출할 때 인자로 Stream File Formt을 지정합니다.
// 파일로 내보내기
1
2
3
4
<p>FDMemTable1.SaveToFile(Path, sfJSON);
 
// 파일에서 불러오기
FDMemTable1.SaveToFile(FilePath, sfJSON);</p>

파일포맷을 사용하기 위해서는 아래 컴포넌트를 추가하거나 Uses절에 필요 유닛을 추가합니다.

  • Bin : TFDStanStorageBinLink 컴포넌트 추가 또는 Uses절에 FireDAC.Stan.StorageBin 추가

  • JSON : TFDStanStorageJSONLink 컴포넌트 추가 또는 Uses절에 FireDAC.Stan.StorageJSON 추가

  • XML : TFDStanStorageXMLLink 컴포넌트 추가 또는 Uses절에 FireDAC.Stan.StorageXML 추가

코드로 테이블 정의, 데이터 추가 하기

코드로 메모리 테이블을 정의하고 추가하는 코드는 아래와 같습니다.
델파이 / Object Pascal
1
2
3
4
5
6
7
8
9
10
11
// Create Field Definitions
FDMemTable1.FieldDefs.Add('ID', ftInteger, 0, False);
FDMemTable1.FieldDefs.Add('Name', ftString, 20, False);
FDMemTable1.CreateDataSet;
  
// Append data
FDMemTable1.Open;
FDMemTable1.AppendRecord([1, 'Jim']);
  
// Load from another DataSet
FDMemTable1.CopyDataSet(DataSet1, [coStructure, coRestart, coAppend]);


C++ 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Create Field Definitions
FDMemTable1->FieldDefs->Add("ID", ftInteger, 0, False);
FDMemTable1->FieldDefs->Add("Name", ftString, 20, False);
FDMemTable1->CreateDataSet();
  
// Append Data
FDMemTable1->Open();
FDMemTable1->Append();
FDMemTable1->FieldByName("ID")->AsInteger = 1;
FDMemTable1->FieldByName("Name")->AsString = "Jim";
FDMemTable1->Post();
  
// Load from another DataSet
FDMemTable1->CopyDataSet(DataSet1, TFDCopyDataSetOptions() << coStructure << coRestart << coAppend);

TFDMemTable 샘플 프로그램

이 샘플에서는 TFDMemTable의 데이터를 디자인 타임 시 로드해 JSON 포맷으로 변경하고 다시 JSON 포맷을 TFDMemTable에 로드하는 기능을 구현했습니다.

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


메모리테이블 데이터를 JSON으로 내보내기, JSON 데이터를 메모리테이블로 불러오기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
procedure TForm1.Button1Click(Sender: TObject);
var
  StrStream: TStringStream;
begin
  StrStream := TStringStream.Create;
  try
    DM.FDMemTable1.SaveToStream(StrStream, sfJSON); // uses FireDAC.Stan.Intf
//    DM.FDMemTable1.SaveToFile(FilePath, sfJSON);
    DM.FDMemTable1.EmptyDataSet;
    Memo1.Lines.Text := StrStream.DataString;
  finally
    StrStream.Free;
  end;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var
  StrStream: TStringStream;
begin
  StrStream := TStringStream.Create(Memo1.Lines.Text);
  try
    DM.FDMemTable1.LoadFromStream(StrStream, sfJSON); // uses FireDAC.Stan.Intf
//    DM.FDMemTable1.SaveToFile(FilePath, sfJSON);
  finally
    StrStream.Free;
  end;
end;


번호 제목 글쓴이 날짜 조회 수
공지 [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) 관리자 2021.01.19 15438
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13961
공지 [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 39255
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 174699
554 [발표자료] 20160830 나만의 C++애플리케이션 완성하기 with C++빌더 험프리 2016.08.26 1917
553 [FireDAC Skill Sprints] 9. LocalSQL: DB에서 가져온 데이터(데이터셋)를 대상으로 다시 SQL쿼리 실행하기 Humphery 2015.04.01 1903
552 멀티-플랫폼 앱 멋지게! 쉽게! 빠르게! 완성하기 - #.1 한번에 멋지게 개발하기 file 험프리 2019.07.09 1886
551 [10.3 리오] IDE가 현대적이고 깔끔하게 업데이트 되었습니다. 관리자 2018.11.14 1886
550 [개발환경 설정] 안드로이드 기기 연결 시 'USB 디버깅 허용' 창이 표시되지 않는 경우 조치 방법 file 험프리 2018.08.21 1867
549 [동영상] 8단계로 완성하는 "2014년 출시 앨범" 앱 개발 "15"분 만에 완료하기 관리자 2014.10.14 1850
548 [튜토리얼] Mobile Tutorials: Mobile Application Development Humphery 2014.06.13 1848
547 [마이그레이션][팁] 유니코드 검토 대상 분석 도구 다운로드 [1] file 험프리 2015.11.16 1845
546 RAD 스튜디오(델파이, C++빌더) 웹개발 방법(WebBroker, IntraWeb) 험프리 2016.09.07 1829
545 손쉬운 데이터 연결 방법(라이브바인딩 활용): 파이어몽키 코스북 6장 file 관리자 2014.07.18 1806
544 RAD Studio XE6 TChart 패치의 건 Humphery 2014.07.31 1793
543 20140424_Developer Direct LIVE! 2014 세미나 세션 자료입니다. 관리자 2014.04.25 1772
542 [10.3 리오][업데이트 2] Firebase 안드로이드 앱 푸쉬 알림 - 10.3.2에서 FCM 수신 설정하기 [1] file 김원경 2019.08.21 1757
541 FireDAC 성능 비교(BDE, dbGO(ADO), dbExpress, FireDAC) 험프리 2016.08.09 1755
540 [BaaS] VCL에서 특정사용자에게 GCM/APN 전송하기(FMX도 사용가능) Humphery 2014.07.25 1727
539 [시애틀] BSON(Binary JSON)을 처리하고, JSON 데이터를 스트리밍 모델로 읽고, 쓸수 있습니다. file Humphery 2015.10.05 1718
538 [업데이트][10.2 도쿄][릴리즈 2] 10.2 도쿄 - 릴리즈 2 출시 & 설치방법 안내 file 험프리 2017.12.13 1693
537 [마이그레이션] 컴파일러 버젼 [1] 험프리 2014.08.18 1691
536 멀티-티어 애플리케이션 개발과 배포: 파이어몽키 코스북 9장 file 관리자 2014.07.25 1689
535 [FireDAC Skill Sprints] 6. 전처리: SQL문을 유연하게 작성할 수 있는 Param와 Macro 사용하기 Humphery 2015.03.13 1683