엔터프라이즈 커넥터는 파이어댁(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 25119
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 23423
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 25414
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 31323
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 32320
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 27742
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 48789
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 185761
1043 데브기어 컴포넌트 컨버터 원리와 구조 설명 험프리 2019.10.11 1074
1042 엔터프라이즈 커넥터로 VCL 애플리케이션에서 '구글 시트' 데이터 조회 및 편집하기 험프리 2019.10.04 659
1041 엔터프라이즈 커넥터 설치하기 file 험프리 2019.10.01 716
» 엔터프라이즈 커넥터로 'VCL 애플리케이션에서 엑셀 데이터 가져오기&편집하기' file 김원경 2019.09.27 1087
1039 이 달의 기술자료 - 2019년 10월 험프리 2019.09.27 432
1038 [RAD서버] JSON 처리 단순화 컴포넌트 활용 - TEMSDataSetResource 험프리 2019.09.27 848
1037 [오프라인 세미나] 델파이 마이그래이션 - 실전 사례로 살펴보는 소프트웨어 현대화 전략 [1] 관리자 2019.09.27 705
1036 VCL 앱, 윈도우 10용으로 현대화하기 관리자 2019.09.25 576
1035 서베이몽키(SurveyMonkey)를 프로젝트에 연동하기 관리자 2019.09.20 832
1034 "모든" 데이터를 프로젝트에 연동하기 - 파이어닥(FireDAC) 엔터프라이즈 커넥터 활용 관리자 2019.09.19 581
1033 3가지 API 이야기: VCL에서 WinAPI, COM&ShellAPI, WinRT 활용하기 관리자 2019.09.18 839
1032 리눅스용 앱에 다양한 스타일 적용하기 (FMX 스타일들을 리눅스 앱에도!) 관리자 2019.09.17 608
1031 밝은 톤의 사용자 친화적인 디자인을 찾고있다면 - 푸에르토 리코(Puerto Rico) FMX 스타일 관리자 2019.09.17 646
1030 과감하면서도 볼드한 효과를 주고 싶다면 - Ruby Graphite FMX 스타일 관리자 2019.09.17 605
1029 그라데이션이 적용된 멋진 스타일을 적용하고 싶다면 - 스텔라(Stellar) FMX 스타일 관리자 2019.09.17 706
1028 현대화 작업, 바로 지금이 골든타임입니다! 관리자 2019.09.11 438
1027 20년된 델파이 앱을 현대식 마이크로서비스 아키텍처로 전환하기 관리자 2019.09.11 1553
1026 [따라하기] Advanced 델파이 UI 작성하기 file 험프리 2019.09.11 2353
1025 [10.3 리오][업데이트 2] 델파이 리눅스 클라이언트 애플리케이션 지원 관리자 2019.09.10 467
1024 [10.3 리오][업데이트 2] 멋지게 업그레이드된 VCL 품질 관리자 2019.09.10 428