移行に関するその他のヒント(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 ファイルから削除します。FireDAC では、Origin が(BDE アプリケーションの場合のように)空であれば、フィールド名を使用します。しかし、ProviderFlags のデフォルト値には pfInKey が含まれておらず、FireDAC では 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
レポート作成や m 層ライブラリなどの多くのサードパーティ製品を使用するには、DAC アダプタ ユニットが必要です。アダプタの入手方法については、サードパーティ製品のベンダに問い合わせてください。
ヒント 7
EDBEngineError は BDE 固有の例外クラスです。FireDAC には、それに相当する EFDDBEngineException クラスがあります。BDE 例外を処理する際は、ErrorCode プロパティを使用して、エラーの種類を取得しています。FireDAC の場合はプロパティ Kind があり、それは列挙値を返します。
たとえば、次のコードは、
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 と TFDDataMove は多くの点で非常に異なります。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 でのマルチスレッド アプリケーション開発の詳細を参照してください。