サイトアイコン Embarcadero RAD Studio, Delphi, & C++Builder Blogs

第35回 エンバカデロ・デベロッパーキャンプ・イン東京 B4フォローアップ

Author: Shinji Chikugi

始めに

第35回デベロッパーキャンプのB4セッションにて、データベースの依存性排除についてお話ししました。その中でFireDACのマクロ機能を用いて依存性を排除する手法が存在する事に触れましたが、時間の関係上具体的なデモは出来ませんでした。 本記事ではそのフォローアップとしてFireDACのプリプロセス機能とマクロ機能をご紹介します。

FireDACのプリプロセス機能とマクロ機能

プリプロセス機能とは、FireDACがSQLコマンドを実行する前に、実行するRDBMSに応じてSQLコマンドを置換する機能です。また、マクロ機能はRDBMSのSQLの「方言」を抽象化しRDBMSに応じた関数に置換する機能です。

例えば、Oracle、SQL Server、InterBaseでシステム日時を取得するクエリは次のようになります。

RDBMS クエリ
Oracle select sysdate from dual;
SQL Server select getdate();
InterBase select current_timestamp from rdb$database;

 

これらの「方言」をFireDACのプリプロセス機能とマクロ機能で吸収すると以下のようになります。TFDQueryのSQLプロパティに以下の値を設定します。

[crayon-66dce5e492b01662889805/]

マクロ「CURRENT_TIMESTAMP()」はシステム日時を取得するマクロです。また「{if~fi}」で囲まれた部分がFireDACのプリプロセス機能によるRDBMSの種類に応じた条件分岐です。RDBMSがOracleならば、”from dual”が、InterBaseならば、”from rdb$database “が展開されます。

これをFireDACのモニタ機能を使って、実際に実行されたSQLをログより確認しましょう。

[crayon-66dce5e492b06670486425/]

ログの「Preprocessed [CMD=」の部分が実際に発行されたSQLコマンドです。

このようにプリプロセス機能とマクロ機能を用いれば、RDBMSの「方言」に依存しないでSQLコマンドを実行することが出来ます。

プリプロセス機能とマクロ機能についての詳細は以下のDocWikiの以下の項目を参照してください。

http://docwiki.embarcadero.com/RADStudio/Tokyo/ja/コマンド_テキストのプリプロセス(FireDAC)

http://docwiki.embarcadero.com/RADStudio/Tokyo/ja/式の作成(FireDAC)

モバイルバージョンを終了