Kori 3월 1일, 2022에 포스트됨 공유하기 3월 1일, 2022에 포스트됨 Docwiki에 있는 "BDE Application Migration (FireDAC)"를 번역한 글 (번역일: 2022년 3월 1일) 위로 가기: BDE 애플리케이션을 FireDAC으로 이전하는 방법 이 예제는 엠바카데로의 고전적인 데모 애플리케이션인 MastApp을 FireDAC과 인터베이스(InterBase) DBMS로 마이그레이션하는 과정을 단계별로 설명한다. 주의: [따라하기] reFind 도구를 이용해 BDE 프로젝트를 FireDAC으로 마이그레이션 따라하기를 보고 따라하기를 권합니다. 지금부터 설명하는 작업과 절차가 크게보면 같지만, 위 링크에 있는 설명이 보다 자세합니다. 목차 1단계 2단계 3단계 4단계 5단계 6단계 7단계 8단계 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이다. 인용하기 이 댓글 링크 다른 사이트에 공유하기 더 많은 공유 선택 사항
Recommended Posts
이 토의에 참여하세요
지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.