BDE アプリケーションの移行(FireDAC)

提供: RAD Studio
移動先: 案内検索

FireDAC への BDE アプリケーションの移行 への移動


この例では、従来の Embarcadero Delphi デモ アプリケーション MastApp を FireDAC および InterBase DBMS にどう移行するかを段階的に示しています。

ステップ 1

C:\Users\Public\Documents\Embarcadero\Studio\18.0\Samples\Object Pascal\Database\FireDAC\Tool\reFind\BDE2FDMigration\Demo フォルダに移動します。この中には、MastApp アプリケーション ソースのコピーが含まれています。 新しいサブディレクトリ FireDAC_MastApp を作成します。 そこに MastApp のソース ファイルをコピーして、元のソースを保存しておきます。

ステップ 2

コマンド ウィンドウを開き FireDAC_MastApp ディレクトリに移動するか、好みのディレクトリ マネージャ(たとえば FAR など)を使用します。 BDE 用語を対応する FireDAC 用語に置き換えるため、RAD Studio のツール reFind を実行します:

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

ステップ 3

FireDAC の接続定義を作成するには、FireDAC エクスプローラを使用します。 その後、接続定義パラメータをセットアップします。 以下は、MastApp の最も簡単な接続定義です。

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

メモ: ここでは、InterBase の C:\MastApp.GDB データベースを作成し、その C:\MastApp.GDB データベースに DBDEMOS データベース(Paradox)を読み込んでいます。 これには、Clever Components 社の InterBase DataPump を使用できます。

ステップ 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 ファイルを開きます。 このデータ モジュールに TFDConnection コンポーネントをセットアップします。 ConnectionDefName を InterBase 接続定義に設定します。 また、ユーザー名とパスワードも正しいものに変更します。 最終的に以下のようになります。

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

ステップ 6

InterBase SQLLink ドライバと FireDAC InterBase ドライバではデータ型マッピングが異なるので、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 では、Paradox や Dbase などのデスクトップ DB をサポートしていません。 そのため、以下のように、デスクトップ DB(Paradox や Dbase など)に関係するコードをすべてアプリケーションから削除する必要があります。

  • DataMod.pas 内の TMastData.UseLocalData メソッド
  • Main.pas 内の TMainForm.ViewLocalClick メソッド

ステップ 8

次に、以下のように、アプリケーションのソース コードを InterBase に合わせて修正しなければなりません。

  • Main.pas 内の TMainForm.ViewRemoteClick メソッドで、" (Local Interbase)" という文字列を " (InterBase)" に置き換えます。
  • Main.pas 内の TMainForm.ViewMenuClick ハンドラを削除します。
  • DataMod.pas 内の TMastData.DataDirectory メソッドを削除します。
  • アプリケーションでは、DB 接続定義が存在しなければ、その場で作成します。 そのため、DataMod.pas 内の TMastData.UseRemoteData を以下のように変更します。
procedure TMastData.UseRemoteData;
var
  Params: TStringList;
begin
  { See if the ConnectionDef exists.  If not, add it. }
  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';
      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;
  SetDatabaseConnectionDef('MASTSQL');
end;
  • アプリケーションで使用する SQL コマンドを調整する必要があります。 DataMod で、CustByLastInvQuery クエリに DESCENDING がキーワードとして含まれていますが、InterBase では DESC を使用します。