엔터프라이즈 커넥터는 파이어댁(FireDAC)을 이용해 데이터베이스를 연동하는 것과 동일한 방법으로 여러 데이터들을 바로 연동할 수 있게 해주는 솔루션입니다.

 

이번에는 커넥터중 Excel용 CData FireDAC 컴포넌트를 사용하여 Excel에 양방향으로 액세스 할 수 있는 응용 프로그램을 구축 해보도록 하겠습니다.

 

Step 1) 엑셀 엔터프라이즈 커넥터 평가판 다운로드 & 설치

 

엔터프라이즈 커넥터 설치 방법은 아래 주소를 참조하여 주시기 바랍니다.

https://tech.devgear.co.kr/delphi_news/456343

 

Step 2) 엑셀 데이터 준비 

ExcelFile을 유효한 Excel 파일 (파일 경로 포함)로 설정해야합니다. 커넥션 컴포넌트는 Excel 2007 이상에서 사용되는 Office Open XML 형식을 지원합니다.

 

통합 문서를  쿼리 한 후 통합 문서의 스프레드 시트 및 범위에 대해 SELECT, INSERT, UPDATE 및 DELETE 문을 실행할 수 있습니다 이 예제에서는 첨부한 Sample.xlsx 파일을 사용하도록하겠습니다.(다른 파일을 사용하셔도 무방합니다).

 

Step 3) FireDac 연결정의(Connection Definetion) 설정

 

영결 정의는 특정 FireDac 드라이버를 사용하여 DBMS에 프로그램을 연결하는 방법을 정의하는 매개변수 집합입니다. 데이터베이스 연결과 동일하게  Data Exploer 및 FireDAC Connection Editor를 사용하여 Connetion Name을 작성할 수 있습니다. 연결 정의 방법에는  지속적(Persitent), Private, 또는 Tempory 연결등이 있습니다. 자세한 정보는 파이어닥 연결 정의를 참조하십시오. 여기 따라하기에서는 데이터 탐색기를 사용하여 애플리케이션 및 프로젝트간에 공유 할 수있는 지속적 연결을 사용하도록 하겠습니다.

 

  1.  Data Exploer를 클릭하고 FireDAC 노드를 확장합니다.
  2.  CData Excel 데이터 소스 노드에서  오른쪽 마우스 클릭하고 Add New Connection을 클릭합니다.
  3.  Connection Name을 'Excel_Conn'으로 입력합니다. 
  4.  FireDAC 연결 편집기가 열리면 아래와 같이 ExcelFile 항목에 영결하고자 하는 엑셀파일을 입력합니다.  

 

cdata_Excel1.png

 

아래의 표는  위의 속성 중 테이블,리턴 값 및 기타 데이터 액세스를 제어하기 위한 몇 가지 속성들을 정리한 표입니다.

 

분류 속성 내용
스키마검색 Orientation 스프레드 시트의 방향과 일치하는 모델 테이블,가로 또는 세로로 설정합니다.
  DefinetionTables

표준 Excel 범위 형식을 사용하여 테이블로 액세스하려는 범위를 명시 적으로 지정하십시오. [Table Name] = [Sheet Name]! [Range]. 세미콜론으로 구분 된 목록에 여러 테이블을 지정하십시오.

SELECT * FROM Excel_Sheet#A5:F *

컬럼검색 Header true 인 경우 첫 번째 행에서 컬럼 이름을 인식합니다. 그렇지 않으면 컬럼 이름 A, B, C 등이 사용됩니다.
  TypeDetectionScheme 컴포넌트가 컬럼의 데이터 유형을 발견하는 방법을 결정합니다.
  RowScanDepth TypeDetectionScheme를 사용하는 경우 이 특성을 스캔 할 행 수로 설정하여 열 데이터 유형을 판별합니다.
공식 AllowFormula 수식 결과 또는 수식 표현식을 삽입 또는 업데이트할지 여부
  Recalculate 데이터가 변경되면 수식을 다시 계산합니다.
  IgnoreCalcError 수식을 계산할 때 발생한 오류를 무시합니다.
  HasCrossSheetReferences 데이터가 변경되면 모든 워크 시트에서 수식을 다시 계산합니다. 컴포넌트는 교차 시트 참조를 따르지만 성능 비용이 있습니다.

 

     5. Test 버튼을 눌러 엑셀 파일이 연결되는지 확인 후 OK 버튼을 클릭합니다.

 
Step 4) VCL 애플리케이션 생성하기
  1.  File > New > VCL Forms Application > Delphi 를 선책하여 프로젝트를 생성합니다.
  2.  TFDPhysExcelDriverLink 및 TFDConnection, TFDGUIxWaitCurso 컴포넌트를 내려 놓습니다.
  3.  TFDConneciton 컴포넌트의 ConnectionDefName 속성을 'Excel_conn'으로 지정합니다
  4.  TFDQuery컴포넌트를 내려 놓고 아래 속성들을 설정하십시오.
  •  Connection : 이미 지정되어 있습니다.
  •  SQL: 원하는 SQL 문을 입력합니다. (예:select * from Sheet4)
  •  Active:true

아래와 같이 코드로 구현하여 연결정의와 쿼리문 구현 할수도 있습니다.

FDConnection1.Name := 'SQLTest';

FDConnection1.DriverName := 'CData.Excel';

with FDConnection1.Params as TFDPhysCDataExcelConnectionDefParams do begin

    ...

end;

FDQuery1.Connection := FDConnection1;

FDConnection1.Connected := true;

FDQuery1.Close;

FDQuery1.Sql,Text := 'SELECT * FROM Sheet4';

FDQuery1.Open;

 

 

   5. TDataSource, TDBGrid 컴포넌트를 사용하여 엑셀 데이터를 아래와 같이 화면에 표시합니다.

  •   TDataSource의 DataSet 속성:FDQuery1;
  •   TDBGrid의 DataSource 속성:DataSource1;

 cdata_Excel2.png

 

 

Step 5) 엑셀 데이터 조회및 데이터 입력작업 

   1.  아래 화면과 같이 TButton, TEdit 컴포넌트들을 내려 놓습니다.

cdata_Excel3.png

 

  2.  '전체 쿼리 검색' 버튼의  onClick 이벤트 핸들러를 다음과 같이 구현합니다.

procedure TForm1.Button1Click(Sender: TObject);

const

  SQL_Text = 'select * from sheet4';

begin

  FDQuery1.Close;

  FDQuery1.SQL.Text := SQL_Text;

  FDQuery1.Open;

end;

 

  3.  '필터검색' 버튼의  onClick 이벤트 핸들러를 다음과 같이 구현합니다

procedure TForm1.Button2Click(Sender: TObject);

const

  SQL_Text =  'select a,b,c from Sheet4 where a >=:pcode';

begin

  FDQuery1.Close;

  FDQuery1.SQL.Text :=  SQL_Text;

  FDQuery1.Params[0].AsString := Edit1.Text;

  FDQuery1.Open;

end;

 

  4.  셀범위 지정

      범위 기능을 사용하여 스프레드 시트의 특정 부분에서 데이터를 선택할 수 있습니다. 

     '셀범위지정' 버튼의  onClick 이벤트 핸들러를 다음과 같이 구현합니다

procedure TForm1.Button3Click(Sender: TObject);

const

  SQL_Text =  'Select * from Sheet4#A3:B10';

begin

  FDQuery1.Close;

  FDQuery1.SQL.Text := SQL_Text;

  FDQuery1.Open;

end;

 

 5.  행 추가

     INSERT 문을 사용하여 스프레드 시트에 새 행을 추가 할 수 있습니다. header 속성을 True로 설정하면 컬럼 헤더를

    기준으로 추가할 수 있습니다. Header 속성이 false이면 셀 이름 (A, B, C 등)을 사용하여 행을 추가해야합니다. 

    행을 추가하면 시트 끝에 추가됩니다. 새로운 행에는 Excel 시트의 위치에 따라 RowId가 할당됩니다.

 

    '행추가' 버튼의  onClick 이벤트 핸들러를 다음과 같이 구현합니다

procedure TForm1.Button4Click(Sender: TObject);

const

  SQL_Text = 'insert into Sheet4 (A,B,C) values(:pa, :pb, :pc)';

begin

  FDQuery1.Close;

  FDQuery1.SQL.Text := SQL_Text;

  FDQuery1.Params[0].AsString := Edit1.Text;

  FDQuery1.Params[1].AsString := Edit2.Text;

  FDQuery1.Params[2].AsString := Edit3.Text;

  FDQuery1.Execsql;

  Button1Click(sender);

 

end;

 

 6.  행중간추가  

    때로는 Excel 시트의 중간에 행을 삽입하려고 할 수 있습니다.  행 번호를 식별하는 RowId와 함께 INSERT 명령을

   사용하여 이를 지원합니다.

   '행중간삽입' 버튼의  onClick 이벤트 핸들러를 다음과 같이 구현합니다

procedure TForm1.Button5Click(Sender: TObject);

const

  SQL_Text = 'insert into Sheet4 (RowId, A, B,C) VALUES (5, :PA, :PB, :PC)';

begin

  FDQuery1.Close;

  FDQuery1.SQL.Text := SQL_Text;

  FDQuery1.Params[0].AsString := Edit2.Text;

  FDQuery1.Params[1].AsString := Edit3.Text;

  FDQuery1.Params[2].AsString := Edit4.Text;

  FDQuery1.Execsql;

  Button1Click(sender);

 

end;

 

 7. 프로그램을 실행하여 각 버튼을 클릭하여 조회및 데이터를 추가하여 보도록하겠습니다.

 

- 지정된 셀 범위(A3:B10) 데이터를 확인 하실 수 있습니다. 

cdata_Excel6.png

 

-마지막 행에 추가된 데이터를 확인 하실 수 있습니다.

cdata_Excel5.png

 

- 5번행에 추가된 코드값 '4444'를 확인 할 수 있습니다.

cdata_Excel4.png

 

 ** 수식  사용도 가능합니다.**

 컴포넌트를 사용하면 셀에 수식을 삽입 할 수 있습니다. AllowFormula 연결 문자열 속성이 true로 설정되면 등호 ( '=')로 시   작하는 삽입은 모두 수식으로 취급됩니다.

 예를 들어, 다음은 셀 B1:B5를 합하는 수식을 B 열에 삽입합니다. 

  INSERT INTO Excel_Sheet (A, B) VALUES ('Bill', '=SUM(B1:B5)')

 

Step 6) 배포하기

설치 디렉토리에는 배포 용 FireDAC 컴포넌트의 라이센스를 부여하는 지침이 포함 된 'deployment_licensing.txt'파일이 있습니다. 

참고 :이 파일은 정식 버전 설정을 실행할 때만 설치됩니다. 베타 또는 평가판 버전 설정을 실행할 때는 설치되지 않습니다.

번호 제목 글쓴이 날짜 조회 수
공지 [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) 관리자 2021.01.19 15478
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13974
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 16506
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 22062
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 23282
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 18934
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 39268
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 174731
1043 [고객사례-POS, 델파이] MalyKangurek POS (포스 시스템 프로그램) 관리자 2018.07.13 4108
1042 David I의 31일 동영상(한글자막) - 파이어몽키 Anchors프로퍼티와 Layout 컴포넌트 활용하기 관리자 2013.03.12 4105
1041 [따라하기] "나의 도서관 앱" 개발 Humphery 2014.10.15 4104
1040 윈도우 VCL 앱을 iOS로 전환하기 관리자 2013.06.29 4099
1039 [XE7] 사물인터넷(IoT)와 RAD Studio -블루투스 [2] Humphery 2014.09.24 4090
1038 모바일 첫걸음: 델파이 iOS 개발 - 2. 컴포넌트와 스타일 적용 관리자 2013.09.13 4087
1037 [하이브리드 앱 개발] 웹페이지에서 델파이 함수 호출하기 Humphery 2015.06.26 4080
1036 TListView iOS 샘플 제공 관리자 2013.06.28 4024
1035 델파이 iOS 개발 따라잡기: 1-2. 기본 컴포넌트 사용하기 관리자 2013.07.31 4016
1034 RAD Studio XE4 따라잡기 워크샵 (부산/대전) 발표자료입니다. file 관리자 2013.05.30 3992
1033 [웹세미나] 멋진 모바일 UI 디자인을 위한 7가지 팁 관리자 2013.07.06 3985
1032 reFind.exe: 마이그레이션 작업에서 수작업을 줄여주는 도구 Humphery 2015.04.09 3977
1031 [10.3 리오][업데이트 3] What's NEW! 신기능 자세히 보기 file 관리자 2019.11.22 3975
1030 맥 OS X 애플리케이션에서 씨리얼포트 연결하기 관리자 2013.08.12 3961
1029 David I의 31일 동영상(한글자막) - Action 및 Gesture를 추가한 파이어몽키 애플리케이션 관리자 2013.03.12 3959
1028 이 달의 기술자료 - 2015년 01월 험프리 2014.12.31 3954
1027 CEF4Delphi(크로미움 기반 웹브라우저) 컴포넌트 설치 및 실행하기 험프리 2019.01.14 3949
1026 [XE8] 근거리 위치기반 서비스를 개발할 수 있는 비콘(Beacon) 연동하기 [1] Humphery 2015.04.15 3943
1025 델파이 iOS 개발 따라잡기: 2. 3D 애니메이션 관리자 2013.08.27 3915
1024 iOS 에서 C++ 지원 XE5 Update 2 가 공개되었습니다. minders 2013.12.13 3898