Jump to content
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr ×
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr

[DocWiki 번역] BDE 애플리케이션 마이그레이션 따라하기 (FireDAC)


Recommended Posts

Docwiki에 있는 "BDE Application Migration (FireDAC)"를 번역한 글 (번역일: 2022년 3월 1일)

위로 가기: BDE 애플리케이션을 FireDAC으로 이전하는 방법
 

이 예제는 엠바카데로의 고전적인 데모 애플리케이션인 MastApp을 FireDAC과 인터베이스(InterBase) DBMS로 마이그레이션하는 과정을 단계별로 설명한다. 

주의: [따라하기] reFind 도구를 이용해 BDE 프로젝트를 FireDAC으로 마이그레이션 따라하기를 보고 따라하기를 권합니다. 
지금부터 설명하는 작업과 절차가 크게보면 같지만, 위 링크에 있는 설명이 보다 자세합니다.

목차


1단계

윈도우 탐색기를 열고 C:\Users\Public\Documents\Embarcadero\Studio\22.0\Samples\Object Pascal\Database\FireDAC\Tool\reFind\BDE2FDMigration\Demo 폴더로 이동한다. 이 폴더에는 MastApp 애플리케이션 소스 코드가 들어있다. 이 폴더 안에 FireDAC_MastApp라는 이름으로 새 하위 폴더를 하나 만들고 나서, 기존의  MastApp 소스 코드 파일들을 모두 복사하여 새로 만든 폴더 안에 붙여 넣는다 (이유: 원본 소스를 그대로 두어 안전하게 보존하고, 새로 만든 하위 폴더 안에서만 모든 작업을 하기 위함)  

 

2단계

명령창을 열고(윈도우 키 + R > cmd 입력 > 엔터 키), 새로 만든 하위 폴더 위치인 FireDAC_MastApp로 이동한다. RAD 스튜디어 안에 있는 도구인 reFind를 실행하여 BDE 용어를 그에 상응하는 FireDAC 용어로 바꾼다. 명령창에서 아래와 같이 하면 된다.

C:\Program Files (x86)\Embarcadero\Studio\22.0\bin\reFind.exe *.pas *.dfm /X:C:\Users\Public\Documents\Embarcadero\Studio\22.0\Samples\Object Pascal\Database\FireDAC\Tool\reFind\BDE2FDMigration\FireDAC_Migrate_BDE.txt

 

3단계

FireDAC Explorer를 사용하여 FireDAC의 연결 정의(connection definition)를 새로 하나 만든다. 그리고 연결 정의 파라미터(들)을 설정한다. 가장 간단한 MastApp용 연결 정의는 아래와 같다. 

[MASTSQL]
DriverID=IB
Protocol=TCPIP
Server=127.0.0.1
DataBase=C:\MastApp.GDB
User_Name=sysdba
SQLDialect=3
CharacterSet=UTF8
ExtendedMetadata=True


주의: 위에 있는 파라미터 중 DataBase에는 C:\MastApp.GDB가 명시되어 있다. 이 글은 인터베이스 데이터 파일인 MastApp.GDB가 그 경로에 이미 있으며, 이 데이터베이스에는 이미 파라독스인 DBDEMOS 데이터베이스에 있던 데이터가 옮겨져 있음을 전제로 한다. 파라독스의 데이터를 인터베이스로 옮길 때는 Clever Components InterBase DataPump를 사용할 수 있다. (역자 주: [따라하기] reFind 도구를 이용해 BDE 프로젝트를 FireDAC으로 마이그레이션 따라하기를 참고하세요)  

 

4단계

DBMS에 맞는 FireDAC 드라이버를 당신의 애플리케이션에 추가할 차례이다. 프로젝트 파일을 열고 FireDAC.Phys.[DBMS 드라이버 ID] 유닛을 추가한다. 예를 들어, 이 예제에서는 인터베이스(InterBase) 데이터베이스에 연결하므로 FireDAC.Phys.IB 유닛을 프로젝트에 추가한다. 그리고  FireDAC.VCLUI.Wait 유닛도 프로젝트에 추가한다.

program Mastapp;

uses
  Forms,
  FireDAC.Phys.IB,
  FireDAC.VCLUI.Wait,
  MAIN in 'MAIN.PAS' {MainForm},
  // …

 

5단계

데이터 모듈인 DataMod.dfm 파일을 열고, 이 폼 파일(.dfm)의 코드를 연다 (폼 파일 코드를 여는 법: DataMod.dfm 폼 화면의 빈 공간에서 마우스 오른쪽 클릭 > 컨텍스트 메뉴에서 View as Text 클릭하거나, 또는 단축키 Alt+F12 사용). 폼 파일 코드에서 TFDConnection 를 찾아서 ConnectionDefName에 해당 인터베이스 연결 정의의 이름 즉 "MASTSQL"을 지정하고, user name과 password도 알맞게 지정한다. 결과는 다음과 같다.

Params.Strings = (
  'ConnectionDef=MASTSQL'
  'User_Name=sysdba'
  'Password=masterkey')

 

6단계

인터베이스의 SQLLink와 FireDAC의 인터베이스 드라이버의 데이터 타입 맵핑은 서로 다르다. 따라서 FireDAC 타입 맵핑을 통해 BDE와 호환될 수 있도록 해야 한다. 그렇지 않으면, 관련된 필드(들)을 모두 새로 만들어야 하기 때문이다. 데이터 맵핑을 설정하려면, TFDConnection.FormatOptions.MapRules 프로퍼티에 알맞은 컬렉션을 채워 넣어야 한다. DataMod.DFM의 폼 파일을 열고 아래와 같이 추가한다.

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

추가로, FormatOptions.StrsTrim 프로퍼티를 False로 지정한다. BDE의 기본값과 이 프로퍼티의 값을 맞추기 위해서이다.

 

7단계

FireDAC은 파라독스 또는 DBase 같은데스크탑 DB를 지원하지 않는다. 따라서 데스크탑 DB (Paradox, Dbase)와 관련된 모든 코드를 애플리케이션에서 제거해야 한다.

  • (DataMod.pas 파일에서) TMastData.UseLocalData 메소드 제거
  • Main.pas 파일에서)TMainForm.ViewLocalClick 메소드 제거


8단계

이제 애플리케이션 소스 코드를 인터베이스에 맞게 조정해야 한다.

  •  Main.pas 파일에 있는 TMainForm.ViewRemoteClick 메소드 안에 있는  ' (Local Interbase)'를 ' (InterBase)'로 바꾼다.
  •  Main.pas 파일에 있는 TMainForm.ViewMenuClick 핸들러를 제거한다.
  •  DataMod.pas 파일에 있는 TMastData.DataDirectory 메소드를 제거한다
  •  DB 연결 정의(connection definition)가 없는 경우에 애플리케이션이 실행 중에 연결 정의를 만들 수 있도록 한다. 그러기 위해 TMastData.UseRemoteData 메소드를 아래와 같이 변경한다.
procedure TMastData.UseRemoteData;
var
  Params: TStringList;
begin
  { ConnectionDef 있는지 촥인한다. 없으면, 추가한다 }
  if not FDManager.IsConnectionDef('MASTSQL') then
  begin
    Params := TStringList.create;
    try
      Params.Values['Protocol'] := 'TCPIP';
      Params.Values['Server'] := '127.0.0.1';
      Params.Values['DataBase'] := 'C:\MastApp.GDB'; // 실제로 MastApp.GDB (인터베이스 데이터 파일)이 있는 전체 경로
      Params.Values['User_Name'] := 'sysdba';
      Params.Values['SQLDialect'] := '3';
      Params.Values['CharacterSet'] := 'UTF8';
      Params.Values['ExtendedMetadata'] := 'True';
      FDManager.AddConnectionDef('MASTSQL', 'IB', Params);
    finally
      Params.Free;
    end;
  end;
  SetDatabaseAlias('MASTSQL'); //역자주: 원문에는 MastApp.SetDatabaseConnectionDef('MASTSQL');로 잘못 기재되어 있어서 정정함
end;
  • 이제, 애플리케이션에서 사용하는 SQL command 들을 조정해야 한다. DataMod.pas 파일 안에 있는 CustByLastInvQuery 쿼리에서 내림차순 정렬 키워드로  DESCENDING를 사용했었다. 하지만, 인터베이스에서는 이 키워드는 DESC이다. 


 

이 댓글 링크
다른 사이트에 공유하기

이 토의에 참여하세요

지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.

Guest
이 토픽(기고/질문)에 답하기

×   서식있는 텍스트로 붙여넣기.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   이전에 작성한 콘텐츠가 복원되었습니다..   편집창 비우기

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

중요한 정보

이용약관 개인정보보호정책 이용규칙 이 사이트가 더 잘 작동하기 위해 방문자의 컴퓨터에 쿠키가 배치됩니다. 쿠키 설정 변경에서 원하는 설정을 할 수 있습니다. 변경하지 않으면 쿠키를 허용하는 것으로 이해합니다.