我想在FireDAC中使用宏來預處理我的SQL查詢。我有一個數據模塊一個TADQuery對象與SQL設置是這樣的:FireDAC - 在宏展開後顯示SQL
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 Property編輯器確保我的字段和連接條件正確。
我的問題是當SQL語句由於where子句而最終無效時。 是否有任何方法可以在預處理後查看將要執行的SQL?現在我正在捕獲FireDac錯誤並顯示EADDBEngineException對象上的SQL。但是,這仍然顯示我的原始SQL與宏。如果在錯誤發生後我無法得到它,那麼無論如何要強制宏替換髮生,以便我可以查看調試器中的SQL以幫助我瞭解錯誤。
如果很重要我將連接到MS Access數據庫,目標是在不久的將來轉移到SQL Server。
只是胡亂猜測(因爲我目前沒有手動安裝FireDAC),但是您不需要調用['Prepare'](http://docs.embarcadero.com/products/rad_studio/firedac/frames.html?frmname=topic&frmfile = uADCompClient_T ADRdbmsDataSet_Prepare.html)方法來觸發預處理?查詢準備的結果應該存儲在['SQLText'](http://docs.embarcadero.com/products/rad_studio/firedac/frames.html?frmname=topic&frmfile=uADCompClient_TADCustomCommand_SQLText.html)屬性中,但這裏是幫助相當混亂,我猜這個屬性隱藏在'TADSQLQuery'中。 – TLama
嗯,我大致檢查了那裏發生了什麼,我仍然不確定是否調用'Prepare'(這對我來說毫無用處)是觸發預處理的最低要求。儘管預處理的SQL是發送到DBMS的,您可以通過['Text'](http://docs.embarcadero.com/products/rad_studio/firedac/frames.html?frmname=topic&frmfile=uADCompClient_TADCustomQuery_Text .html)屬性(這種屬性的相當罕見的名稱)。所以,我寧願等待一些可信的答案。好問題! – TLama
@TLama - 謝謝! ADQuery.Text似乎是我需要的。我毫不猶豫地通過了該財產。從您的意見中,我確實在幫助文件中找到了另一個簡短的參考。 [跟蹤和監控](http://docs.embarcadero.com/products/rad_studio/firedac/Tracing_and_Monitoring.html)部分的底部標題爲「檢查SQL命令文本」。它看起來並不像我可以訪問錯誤對象上的.Text屬性,但它仍然是一個很大的幫助,能夠在調試器中看到它。 –