移行に関するその他のヒント(FireDAC)
FireDAC への BDE アプリケーションの移行 への移動
ヒント 1
以下のプロパティは相当するものが FireDAC にないので、完全に削除しなければなりません。
- SessionName は完全に削除しなければなりません。しかし、アプリケーションでは、同じ名前の複数の接続がさまざまなセッションで使用されている可能性があるので、気をつけてください。
- PrivateDir は完全に削除しなければなりません。
メモ: これは FireDAC_Migrate_BDE.txt 移行スクリプトで行われます。
ヒント 2
FireDAC には BDE の TTable に相当する TFDTable がありますが、移行時にすべての TTable を TFDQuery に完全に置き換えることをお勧めします。
ヒント 3
永続フィールドを伴う BDE アプリケーションについては、さらに調整する必要があります。BDE では、永続フィールドの Origin プロパティと ProviderFlags プロパティも、一意識別フィールドを取得するためのクエリ DB ディクショナリも、提供されず使用されません。FireDAC が提供し使用する永続フィールドのプロパティは、Origin と ProviderFlags です。 FireDAC_Migrate_BDE.txt 移行スクリプトでは、TField.Origin 値をすべて DFM ファイルから削除します。Origin が空の場合(BDE アプリケーションの場合のように)、FireDAC はフィールド名を使用します。 しかし、ProviderFlags のデフォルト値には、pfInKey が含まれておらず、FireDAC では、PK フィールドのために DB にクエリをかけることはありません。そのため、一意識別フィールドの取得に失敗するので、さらにいずれかの処理を行う必要があります。
- 永続フィールドの再構築
- ProviderFlags の手動調整
- UpdateOptions.KeyFields の手動指定
ヒント 4
次のようなコード スニペット:
Screen.Cursor := crSQLWait;
try
......
finally
Screen.Cursor := crDefault;
end;
以下のコードに置き換えてください。
uses
FireDAC.Stan.Factory, FireDAC.UI.Intf;
......
var
oWait: IFDGUIxWaitCursor;
......
FDCreateInterface(IFDGUIxWaitCursor, oWait);
oWait.StartWait;
try
......
finally
oWait.StopWait;
end;
ヒント 5
FireDAC には、BDE API に相当するものはありません。 このため、BDE API を直接使用するコードは、FireDAC API のみを使用するように再コーディングする必要があります。直接の解決策はありません。
ヒント 6
多くのサードパーティ製品(レポート機能や、多層ライブラリなど)には、DAC アダプタ ユニットが必要です。アダプタの入手方法については、サードパーティ製品ベンダーにお問い合わせください。
ヒント 7
EDBEngineError は、BDE 固有の例外クラスです。FireDAC には、それに相当する EFDDBEngineException クラスがあります。BDE 例外を処理する際、プログラマは ErrorCode プロパティを使用してエラーのタイプを取得します。FireDAC にはプロパティのタイプがあり、列挙値を返します。
たとえば、次のコードを変更します:
if E is EDBEngineError then
begin
case EDBEngineError(E).Errors[0].ErrorCode of
DBIERR_KEYVIOL: MetaBaseDBError(SMb_DataSetInvalidPKeyValue, E);
end;
変更後:
if E is EFDDBEngineException then
begin
case EFDDBEngineException(E).Kind of
ekUKViolated: MetaBaseDBError(SMb_DataSetInvalidPKeyValue, E);
end;
ヒント 8
コンポーネント TBatchMove と TFDBatchMove は、多くの点で非常に異なります。TBatchMove コンポーネントを使用するコードは、書き直す必要があります。
ヒント 9
TFDConnection.OnLogin イベントは、TDatabase.OnLogin イベント パラメータ リストと互換性がありません。このため、たとえば、次のハンドラは:
procedure TMyDataModule.dbLogin(Connection: TFDConnection; LoginParams: TStrings);
begin
LoginParams.Values['USER NAME'] := 'me';
LoginParams.Values['PASSWORD'] := 'pwd';
end;
次のように置き換える必要があります:
procedure TMyDataModule.dbLogin (AConnection: TFDCustomConnection; const AConnectionDef: IFDStanConnectionDef);
begin
AConnectionDef.UserName := 'me';
AConnectionDef.Password := 'pwd';
end;
ヒント 10
アプリケーションで BDE の異種間クエリを使用している場合、FireDAC では、ローカル SQL を使用しなければなりません。
ヒント 11
BDE でマルチスレッド処理を有効にするために、アプリケーションでは TSession.AutoSessionName を True に設定する場合があります。FireDAC では名前付きセッションの概念をサポートしていません。代わりに、アプリケーションでは、TFDQuery.ConnectionName(名前によるバインディング)の使用をやめて TFDQuery.Connection(参照によるバインディング)に切り替える必要があります。FireDAC でのマルチスレッド アプリケーション開発の詳細を参照してください。