You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi中如何获取TFDQuery已合并参数的SQL语句?

获取TFDQuery发送到服务器的完整SQL语句

FireDAC默认采用参数化查询模式,不会将参数值直接拼接进SQL文本发送给数据库服务器(这也是参数化查询的安全优势),但你可以通过以下几种方式获取包含参数值的“完整SQL”(或查看实际查询请求):

方法1:使用FireDAC内置的GetCommandText方法

通过TFDQuery的Command对象调用GetCommandText方法,传入ctAll参数即可生成替换了参数值的SQL文本。示例代码:

var
  FullSQL: string;
begin
  FullSQL := qry.Command.GetCommandText(ctAll);
  // FullSQL即为包含参数值的完整语句,可用于日志记录
end;

注意:该方法生成的是FireDAC模拟的拼接语句,并非数据库服务器实际接收的内容(服务器接收的是参数化语句+独立参数值),但足以满足日志记录需求。

方法2:启用FireDAC日志功能

配置TFDConnection的日志选项,直接记录所有SQL执行和参数信息:

  • 设计时:选中TFDConnection,在Object Inspector的Logging属性组中,设置LogLevel为llDebug或llVerbose,指定LogFile路径;
  • 代码配置示例:
FDConnection1.Logging.LogLevel := llVerbose;
FDConnection1.Logging.LogFile := 'C:\FireDAC_Logs.txt';
FDConnection1.Logging.Active := True;

日志文件会详细记录原始SQL、参数名称及对应值,可间接整理出完整执行语句。

方法3:使用FireDAC Monitor工具

FireDAC自带的FD Monitor可实时监控所有数据库操作:

  • 在Delphi IDE中点击Tools菜单下的FireDAC Monitor;
  • 运行应用后,工具会自动捕获所有查询请求,展开对应项即可查看参数化SQL和参数值,也可手动拼接成完整语句。

方法4:数据库官方监控工具

若需要查看服务器实际接收的请求,可使用对应数据库的官方工具:

  • MySQL:开启General Query Log或使用MySQL Workbench监控;
  • SQL Server:使用SQL Server Profiler或Extended Events;
  • Oracle:使用Oracle Enterprise Manager或SQL Trace。
    这些工具能直接捕获服务器端收到的所有查询(包括参数化语句和参数值)。

内容的提问来源于stack exchange,提问作者Alister

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 19:04:53