새로운 글
새로운 덧글

이 글에서는 델파이 7 프로젝트를 델파이 XE7으로 마이그레이션하는 작업을 따라하기로 진행합니다. 특히 BDE 컴포넌트를 FireDAC 컴포넌트로 변경하는 작업을 reFind.exe(텍스트 치환도구)를 이용해 일괄변경해 자동화 합니다. 

 

이 따라하기에는 아래 내용을 익힐 수 있습니다.

  • 이전버전 델파이(델파이 7)를 최신버전(델파이 XE7)으로 마이그레이션 작업을 직접 진행해봅니다.
  • BDE 기술을 사용하는 프로젝트를 FireDAC 기술로 마이그레이션 해봅니다.
  • 마이그레이션의 대부분을 차지하는 컴포넌트 변경과 속성 변경 작업을 변환툴(reFind.exe)을 이용해 작업 시간을 대폭 줄여줍니다.
    (reFind.exe는 reFind.exe: 마이그레이션 작업에서 수작업을 줄여주는 도구 글을 통해 알아보기 바랍니다.)
이 글은 엠바카데로 기술문서 - BDE Application Migration (FireDAC)를 참고해 작성되었습니다.

 

마이그레이션 대상

 

따라하기에서는 델파이 7의 샘플 중 DB\MastApp을 대상으로 진행합니다. 이 프로젝트는 다음 이유로 선정하였습니다.

  • 이전 버전의 델파이 코드 - 델파이7 프로젝트를 델파이 XE7으로 마이그레이션합니다.
  • BDE 사용 프로젝트 - BDE 프로젝트를 FireDAC으로 마이그레이션합니다.
  • 적당한 규모(13개 폼, 8개 테이블 사용)의 프로젝트 - 복수의 소스코드와 폼파일에서 컴포넌트와 속성을 reFind.exe로 일괄변경합니다.

마이그레이션 대상과 목표

 항목

 마이그레이션 대상

 마이그레이션 목표

 델파이 버전

 델파이 7

 델파이 XE7

 데이터 액세스 기술

 BDE

 FireDAC

 데이터베이스

 파라독스

 인터베이스

 스타일

 윈도우 기본 스타일

 현대식 스타일(VCL 스타일 사용)

 코드베이스

 안시코드 기반

 유니코드 기반

 

[따라하기] reFind 도구를 이용해 BDE를 FireDAC으로 마이그레이션하기

 

마이그레이션 단계는 크게 아래 4단계로 진행합니다.

  1. 마이그레이션 대상 소스 준비하기
  2. reFind.exe 컴포넌트와 속성 일괄 변경하기
  3. 데이터베이스 연결 설정하기
  4. 일괄 변경되지 않은 코드 수작업 후 변환 규칙파일에 추가하기
추가> 현대식 스타일 적용(VCL 스타일 이용)

1, 마이그레이션 대상 소스 준비하기

따라하기에서는 델파이 7의 기본 데모 중 DB\MastApp을 대상으로 마이그레이션 진행합니다.

 

위 압축파일을 다운로드 후  적당한 경로에 압축해제 합니다.(해당 경로를 이후부터 마이그레이션 경로라고 칭하게습니다.)

(작업 완료된 최종 마이그레이션 관련 파일은 위와 같습니다.)

 

2, reFind.exe로 컴포넌트와 속성 일괄 변경하기

reFind를 이용해 BDE 컴포넌트와 속성을 FireDAC으로 일괄 변경합니다.

 

BDE를 FireDAC으로 마이그레이션하는 변환 규칙파일 가져오기

reFind에서는 변환 규칙이 등록된 변환 규칙파일을 불러와 일괄변환할 수 있습니다. 델파이 XE7의 샘플에서는 BDE를 FireDAC으로 마이그레이션 하는 패턴이 등록된 변환 규칙파일과 샘플을 제공합니다. 다음 경로에서 변환 규칙파일(FireDAC_Migrate_BDE.txt)을 복사 해 마이그레이션 경로에 붙여넣기 합니다.

  • <델파이 기본샘플>\Object Pascal\Database\FireDAC\Tool\reFind\BDE2FDMigration\FireDAC_Migrate_BDE.txt
    (XE7 기준 : C:\Users\Public\Documents\Embarcadero\Studio\15.0\Samples\Object Pascal\Database\FireDAC\Tool\reFind\BDE2FDMigration)

패턴 항목 추가

앞에서 복사한 변환 규칙파일에는 이미 다양한 변환 패턴이 등록되어 있습니다. 이 패턴을 그대로 사용할 수 있지만 여러분이 직접 항목을 추가할 수도 있습니다. 

실습을 위해 패턴을 하나 추가해 보겠습니다. 미리 테스트해보니 DBLookUp 유닛은 FireDAC에서 사용하지 않아 유즈절에서 제거해야 합니다.

FireDAC_Migrate_BDE.txt 파일을 열고 #unuse DBLookUp 항목을 추가하고 저장합니다.

 

이렇듯 변환 규칙파일은 수시로 추가 보강할 수 있으며, 보강된 변환 패턴파일은 다른 프로젝트를 마이그레이션 할때 재사용 할 수 있습니다.

 

reFind.exe 실행

reFind.exe는 커맨드 라인 도구여서 명령 프롬프트에서 실행할 수 있습니다. 하지만 작업 편의 상 배치파일(*.bat)을 만들어 실행하겠습니다. 마이그레이션 경로에 텍스트파일을 만들고 아래 코드를 입력 후 migration.bat로 저장합니다.

refind Mastapp_d7\*.pas Mastapp_d7\*.dfm /X:FireDAC_Migrate_BDE.txt

 

배치파일(migration.bat)을 실행하면 아래와 같이 대상 파일 목록에서 변경된 항목(Modified)을 표시합니다.

 

이 단계를 통해 대부분의 BDE 컴포넌트와 속성이 FireDAC 컴포넌트로 변경되었습니다.(확인은 데이터베이스 연결 단계에서 진행합니다.)

3, 데이터베이스 연결 설정하기

이 단계에서는 변환된 FireDAC 컴포넌트를 확인하고 FireDAC 컴포넌트를 이용해 데이터베이스와 연결합니다.

(참고: 이 마이그레이션에는 파라독스 DB를 인터베이스 DB로 변경하는 작업이 포함되어 있습니다. 아마 여러분의 프로젝트를 마이그레이션한 경우 이 과정을 생략할 수 있습니다.)

 

FireDAC 컴포넌트 확인

델파이 XE7에서 File > Open Project 메뉴를 이용해 mastapp.dpr을 엽니다.(메인 폼이 아무 오류없이 잘 열립니다.)

데이터베이스 관련 기능이 구현된 DataMod.pas(데이터모듈)을 열어봅니다. 

아직 연결설정 전이므로 아래와 같이 연결정보가 정의되지 않았다는 오류가 발생합니다. 이 오류는 무시합니다.(OK 버튼 클릭) 약 10회 정도 발생합니다.

 

데이터 모듈을 보면 아래 그림처럼 FireDAC 컴포넌트로 대체된 것을 확인할 수 있습니다.

 

FireDAC 연결정의 추가

FireDAC Exprelore 도구를 이용해 FireDAC 연결정의 추가 후 애플리케이션에서 사용하도록 하겠습니다.(인터베이스 DB 파일을 델파이 XE7 샘플에서 제공하는 MASTSQL.GDB를 이용합니다.)

  1. 델파이 메인메뉴 > Tools > FireDAC Explorer 메뉴를 선택 해 FireDAC Explorer 도구를 실행합니다.
  2. Connection Definition 버튼을 클릭해 새로운 연결정의를 만듭니다.
  3. 오른쪽 화면에서 아래 속성을 설정합니다.
    • Driver ID : IB

    • Database : C:\Users\Public\Documents\Embarcadero\Studio\15.0\Samples\Data\MASTSQL.GDB (XE7 기준)

    • User_Name : sysdba

    • Password : masterkey

  4. 연결정의 이름을 "MASTSQL"로 지정합니다.

 

FireDAC 연결정의 설정

다시 델파이 화면으로 돌아옵니다. 데이터 모듈에서 Database(TFDConnection) 컴포넌트를 선택 후 연결정의 속성(ConnectionDefName)을 선택 해 앞의 FireDAC Exploreer에서 추가 정의한 연결정보를 지정합니다.

  • ConnectionDefName : MASTSQL(앞에서 설정한 이름 지정)

Connected 속성을 True로 연결해 연결을 확인합니다.

4, 일괄 변경되지 않은 코드 수작업 후 변환 규칙파일에 추가하기

2단계에서 BDE 컴포넌트와 속성을 FireDAC으로 일괄 변환했습니다. 이번 단계에서는 일괄 변환되지 않은 부분을 직접 수정 후 변환 규칙파일에 추가할 수 있는 부분을 추가해 다음 마이그레이션 작업에서 수작업을 줄일 수 있도록 합니다.
 
이 단계에서 다음 작업을 진행합니다.
  • 컴포넌트의 이벤트와 구현된 메소드의 파라메터 일치 시키기
  • 사용하지 않는 기능과 메소드 제거하기
  • 변경된 함수이름과 속성 변경하기
  • 데이터 매핑 규칙 추가하기(DB를 변경할 경우 진행합니다.)
컴포넌트의 이벤트와 구현된 메소드 파라메터 일치 시키기
프로젝트를 컴파일(Ctrl + F9)하면 다음 오류가 발생합니다.

(Parts 컴포넌트의 OnUpdateError 이벤트와 연결된 EditUpdateError 메소드가 파라메터가 일치하지 않으니 참조를 제거하겠느냐는 오류입니다.) 
Cancel 버튼을 눌러 취소하고 Parts.OnUpdateError와 EditUpdateError 메소드의 파라메터를 일치시키는 작업을 합니다.
오류가 발생한 Parts(TFDTable) 컴포넌트의 OnUpdateError 이벤트를 보면 EditUpdateError 메소드가 연결되어 있지만 파라메터는 다음과 같이 차이가 있습니다.

 
EditUpdateError 메소드 파라메터
1
2
procedure TMastData.EditUpdateError(DataSet: TDataSet; E: EDatabaseError;
  UpdateKind: TFDUpdateRequest; var UpdateAction: TFDErrorAction);
 
Parts.OnUpdateError 이벤트 파라메터
(TFDTable의 OnUpdateError 이벤트 확인을 위해 Parts 컴포넌트의 OnUpdateError에 연결된 EditUpdateError를 지우고 더블클릭해 OnUpdateError 이벤트 핸들러를 다시 만들면 아래와 같은 구조로 생성됩니다.)
1
2
procedure TMastData.PartsUpdateError(ASender: TDataSet; AException: EFDException;
  ARow: TFDDatSRow; ARequest: TFDUpdateRequest; var AAction: TFDErrorAction);
위 2개의 메소드와 이벤트가 일치하지 않기 때문에 EditUpdateError 메소드를 OnUpdateError 이벤트에 맞춰줍니다.
1
2
3
4
5
6
7
   // 선언부
   procedure EditUpdateError(DataSet: TDataSet; E: EFDException;
     UpdateKind: TFDUpdateRequest; var UpdateAction: TFDErrorAction);
 
// 구현부
procedure TMastData.EditUpdateError(DataSet: TDataSet; E: EFDException;
 ARow: TFDDatSRow; UpdateKind: TFDUpdateRequest; var UpdateAction: TFDErrorAction);
이 작업은 앞으로 다른 마이그레이션 작업에서도 발생할 수 있기 때문에 변환 규칙파일에 추가합니다.
변환 규칙파일(FireDAC_Migrate_BDE.txt)을 열고 파일의 마지막 줄에 두번째 파라메터 데이터타입을 수정하는 패턴을 등록합니다.
#migrate EDatabaseError -> EFDException
 
3번째 파라메터를 추가하는 패턴(ARow: TFDDatSRow)은 reFind에서 파라메터 추가 기능을 제공하지 않아 등록하지 않습니다. 이런 경우 잘 기록해 두고 다음 마이그레이션에서 참고하도록 합니다.
 
사용하지 않는 메소드 제거하기
다시 컴파일(Ctrl + F9) 해보면 다음 오류가 발생합니다.

위 오류의 경우 DBMS의 별칭을 등록하는 기능으로 마이그레이션 이후에는 사용하지 않습니다. 주석처리합니다.

여러분 프로젝트를 마이그레이션 할때에도 변경해야 하는 기능과 제거해야 하는 기능을 잘 판단해 진행하시기 바랍니다. 

 

변환 규칙파일에도 제거 패턴을 추가합니다. 변환 규칙파일(FireDAC_Migrate_BDE.txt)을 열고 파일 마지막 줄에 아래 내용을 추가합니다.

#remove AddStandardAlias

 

변경된 함수이름과 속성 변경하기

델파이 7에서 사용하던 ShortDateFormat 전역변수는 FormatSettings.ShortDateFormate으로 변경되어 아래와 같이 오류를 나타내는 빨간줄이 표시됩니다.

 

ShortDateFormat을  FormatSettings.ShortDateFormat으로 변경하고 변환 규칙파일에 다음 구문을 추가합니다.

#migrate ShortDateFormat -> FormatSettings.ShortDateFormat

#migrate FormatSettings.FormatSettings.ShortDateFormat -> FormatSettings.ShortDateFormat

 

데이터 매핑 규칙 추가하기

인터베이스 SQLLink와 FireDAC 인터베이스 드라이버는 데이터타입이 다르기 때문에 FireDAC 타입으로 매핑해 줘야합니다. 

데이터 매핑 작업은 연결(TFDConnection) 컴포넌트의 FormatOptions.MapRules 속성에 설정할 수 있습니다.

 

MapRules와 같이 많은 속성을 설정해야 하는 경우 속성을 하나하나 등록하지 않고 문자열로 일괄 설정할 수 있습니다.

팁> 속성 문자열로 일괄 적용하기

폼(또는 데이터모듈) 우측 마우스 팝업메뉴 > View as Text 메뉴를 선택하면 폼(또는 데이터모듈)의 컴포넌트와 속성을 문자열로 편집할 수 있습니다.

편집을 완료하면 다시 소스에디터에서 우측 마우스 팝업메뉴 > View as Form 메뉴로 폼(또는 데이터모듈)으로 돌아올 수 있습니다.

 

데이터 모듈의 Database 컴포넌트에 아래 속성을 추가합니다. (데이터 타입 매핑의 자세한 내용은 엠바카데로 기술문서: Data Type Mapping을 참고하기 바랍니다.)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Object Database : TFDConnection
  ......
   FormatOptions . OwnMapRules  =  True
   FormatOptions . MapRules  = <
     item
       PrecMax =  10
       PrecMin =  0
       ScaleMax =  0
       ScaleMin =  0
       SourceDataType = dtFmtBCD
       TargetDataType = dtInt32
      end
     item
       SourceDataType = dtFmtBCD
       TargetDataType = dtDouble
      end
     item
       SourceDataType = dtDateTimeStamp
       TargetDataType = dtDateTime
     end>
 ......
 end

 

데이터 매핑 규칙추가로 마이그레이션 과정을 모두 마쳤습니다. 

이제 실행(F9)하면 오류 없이 실행되고 동작합니다.

 

 

추가> 현대식 스타일 적용하기

 

VCL 스타일을 이용해 VCL 애플리케이션의 스타일을 현대식 스타일로 적용할 수 있습니다.

 

 

적용방법(Project > Options > Application > Appearance)

 

관련 글

번호 제목 글쓴이 날짜 조회 수
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 1072
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 4435
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 974
공지 [프로그래밍 강의] 2019.4~2019.7 관리자 2015.01.22 7693
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 관리자 2015.06.30 13159
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2019년 5월 업데이트 됨) 험프리 2014.01.16 150007
» [따라하기] reFind 도구를 이용해 BDE 프로젝트를 FireDAC으로 마이그레이션 따라하기 [5] Humphery 2015.04.14 2755
146 reFind.exe: 마이그레이션 작업에서 수작업을 줄여주는 도구 [3] Humphery 2015.04.09 2569
145 "모바일 앱" 개발 또는 유지관리, 데브기어와 해결하세요! file 관리자 2015.03.26 12033
144 [VCL] TaskDialog 컴포넌트 소개 Humphery 2015.02.25 871
143 [Delphi week 2015] 윈도우 3.11에서 델파이1.0 사용하기 관리자 2015.02.13 1017
142 [VCL] 에디트/버튼의 다양한 속성 소개 Humphery 2015.02.13 1277
141 [XE7] 안드로이드 WiFi 상태조회와 설정하기 Humphery 2015.02.12 1523
140 [XE7] 안드로이드 블루투스 활성화 조회와 설정하기 [1] Humphery 2015.02.12 1261
139 [무료 온라인 세미나] Delphi Week 2015 file 관리자 2015.02.07 915
138 20150204 VCL 개발자를 위한 Speed UP! RAD스튜디오 관리자 2015.02.05 966
137 [VCL] TaskDialog 컴포넌트 소개 Humphery 2015.02.03 766
136 [VCL] 리본컨트롤 자습서 동영상 Humphery 2015.02.03 1287
135 바코드 스캐너 기능 구현하기(iOS, Android) [1] 험프리 2015.01.14 5404
134 [XE7] Castalia로 델파이 코딩 생산성을 높일 수 있습니다.(XE7사용자 무료제공) Humphery 2014.12.09 2292
133 [무료 온라인 강의] 마르코칸투의 "델파이 오브젝트 파스칼" 관리자 2014.11.28 1601
132 더 쉬운코드, 더 유연한 코드를 작성할 수 있는 현대식 문법 [1] Humphery 2014.11.06 4073
131 델파이 문법을 익힐 수 있는 문서모음 [2] Humphery 2014.11.03 2330
130 XE7에서 추가 된 안드로이드 프로젝트에서 외부 라이브러리(jar) 사용을 위한 정보 [1] Humphery 2014.11.03 2941
129 8단계로 완성하는 "2014년 출시 앨범" 앱 개발 따라하기 [1] file Humphery 2014.10.07 3316
128 [온라인 세미나 발표자료] RAD Studio XE7! 관리자 2014.09.17 1531


광고 모듈이 설치되어 있지 않아 실행을 중단합니다..