FireDAC でマクロを使用して SQL クエリを前処理しようとしています。SQL が次のように設定されたデータ モジュールに TADQuery オブジェクトがあります。
Select * from MyTable
join OtherTable on MyTable.Key = OtherTable.Key
&Where
次に、私のコードでこれを行います:
WhereClause = 'stuff based on my form';
Query.MacroByName('Where').AsRaw := WhereClause;
Query.Open;
これは、SQL プロパティ エディターを使用してフィールドと結合条件が正しいことを確認できるため、複雑なクエリでうまく機能します。
私の問題は、where 句が原因で SQL ステートメントが無効になることです。 実行される前処理後の SQL を確認する方法はありますか? 現在、FireDac エラーをキャッチし、EADDBEngineException オブジェクトにある SQL を表示しています。ただし、マクロを使用した元の SQL はまだ表示されています。エラーが発生した後にアクセスできない場合は、マクロの置換を強制的に実行して、デバッガーで SQL を調べて、何が問題なのかを確認することができます。
問題があれば、近い将来に SQL Server に移行することを目標に、MS Access データベースに接続しています。