【发布时间】:2014-02-20 18:03:17
【问题描述】:
我正在尝试使用 FireDAC 中的宏来预处理我的 SQL 查询。我在数据模块上有一个 TADQuery 对象,其 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 属性编辑器确保我的字段和连接条件是正确的。
我的问题是 SQL 语句由于我的 where 子句而最终无效。 有什么方法可以查看将要执行的预处理后的 SQL? 现在我正在捕获 FireDac 错误并显示 EADDBEngineException 对象上的 SQL。但是,这仍然显示了我的原始 SQL 和宏。如果在错误发生后我无法访问它,是否仍然强制执行宏替换,以便我可以查看调试器中的 SQL 以帮助我查看问题所在。
如果重要的话,我将连接到 MS Access 数据库,目标是在不久的将来迁移到 SQL Server。
【问题讨论】:
-
好吧,我已经大致检查了那里发生的事情,但我仍然不确定调用
Prepare(我知道这对你没用)是否是触发该预处理的最低要求。虽然,预处理的 SQL,发送到 DBMS 的 SQL,您可以通过Text属性访问(此类属性的名称非常不常见)。所以,我宁愿等待一些可信的答案。好问题! -
@TLama - 谢谢! ADQuery.Text 似乎是我需要的。我不假思索地跳过了那处房产。从您的 cmets 中,我确实在帮助文件中找到了另一个简短的参考。 Tracing and Monitoring 部分底部有一个简短的段落,标题为“检查 SQL 命令文本”。看起来我无法访问错误对象上的 .Text 属性,但能够在调试器中看到它仍然会有很大帮助。
标签: delphi delphi-xe3 firedac