🔥

FireDAC(DB)コンポーネントの組み合わせ

2024/12/22に公開

最近、社内で非推奨パターンでの設計を多く見てしまったため記載。

代表的なパターン

  • パターン① : [FDConnection] - [FDQuery] - [DataSetProvider] - [ClinetDataSet]
  • パターン② : [FDConnection] - [FDQuery]
  • パターン③ : [FDConnection] - [FDCommand] - [FDTableAdapter] - [FDMemTable]

パターン① (非推奨)

[FDConnection] - [FDQuery] - [DataSetProvider] - [ClinetDataSet]

2020年の段階で、EmbarcaderoからFireDACコンポーネントとDataSetProviderおよびClientDataSetの組み合わせることは推奨されなくなった。アーキテクチャの新旧が混ざることにより、従来と異なる動作が起こるとのこと。代替手段は後程紹介する。
https://blogs.embarcadero.com/ja/firedac-tutorial-05-ja/

パターン②

[FDConnection] - [FDQuery]

ローカルDBや、安定的にアクセスできる環境にある場合はこの組み合わせで十分である。
FDQueryはデフォルトでは遅延取得機能がONになっておりデータを徐々に取得するため、
RecordCountを知りたい場合には、直前にFetchAllを使うといいだろう。

query->Open();
query->FetchAll();    // 全データを取得
int allCount = query->RecordCount;

パターン③

[FDConnection] - [FDCommand] - [FDTableAdapter] - [FDMemTable]

パターン①の代替となる組み合わせがこれ。
パターン②との主な違いは、オフライン環境下でのデータ操作が可能である点など。
FDCommandはDataSetを持たず、実行したSQLの結果をFDTableAdapterを経由してFDMemTableまで届ける。

Discussion