FireDAC - 宏扩展后显示SQL

时间:2014-02-20 18:03:18

标签: delphi delphi-xe3 firedac

我正在尝试在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属性编辑器确保我的字段和连接条件是正确的。

我的问题是,由于我的where子句,SQL语句最终无效。 有没有办法在预处理之后看到SQL?现在我正在捕捉FireDac错误并显示EADDBEngineException对象上的SQL。但是,仍然显示我的原始SQL与宏。如果我在错误发生后无法访问它,那么无论如何都要强制进行宏替换,这样我就可以查看调试器中的SQL来帮助我查看错误。

如果重要,我将连接到MS Access数据库,目标是在不久的将来转移到SQL Server。

2 个答案:

答案 0 :(得分:2)

除了使用Text属性,要监视哪些SQL 实际进入数据库引擎,请考虑使用" FDMonitor" FireDAC实用程序。根据DokWiki页面(如下):

  • 在表单上放置TFDMoniRemoteClientLink组件,
  • 将其“跟踪”属性设置为 True
  • 将MonitorBy = Xxx连接定义参数添加到现有FDConnection组件。您可以在IDE对象检查器中执行此操作,方法是选择FDConnection组件,展开Params属性,并将MonitorBy设置为mbRemote。

请注意,TFDMoniXxxxClientLink应该在数据模块或表单创建顺序中的TFDConnection之前,因此通过右键单击表单或数据模块,然后创建订单,并将TFDMoni ..组件移动到FDConnection上方来调整此项。

此外,它有助于TFDMoniXxxxClientLink的选项,禁用正在记录的大多数事件,否则返回的所有数据也会显示在FireDAC监视器中。展开EventKinds属性,关闭所有事件类型,ekConnConnect,ekConnPrepare和ekCmdExecute除外。

然后从IDE打开FireDAC监视器(工具> FireDAC监视器)。只有在显示器运行时才启动应用程序。双击跟踪事件(在“跟踪输出”选项卡中),您将在底部窗格中看到发送到数据库的实际SQL。

如上所述,添加ekConnPrepare的EventType似乎很可能会在调用查询的准备工作时向您显示,但我确实没有足够的时间说出来。

有关详细信息,请参阅DocWiki上的以下页面:

概述:FDMonitor

如何:Tracing and Monitoring (FireDAC)

其他FireDAC实用程序:Utilities (FireDAC)

答案 1 :(得分:1)

(只是从未回答的问题列表中删除此问题)

来自评论:

  

好吧,我已经粗略地检查了那里发生了什么,我还没有   确定如果调用准备(这对我来说没用)是   触发预处理的最低要求。虽然,   预处理的SQL,发送到您可以访问的DBMS的SQL   通过文本属性(此类属性的名称非常罕见)。 - TLama 2月   21&14; 14:8:18