FireDac 获取受 FDQuery.execsql 命令影响的行数

FireDac get the count of rows affected by FDQuery.execsql command

在 SQLITE 数据库的表 1 上执行 INSERT、UPDATE 或 DELETE 命令后,如何获取受 FireDAC FDQuery.ExecSQL 命令影响的计数?

FDQuery.SQL.Text:='UPDATE table1 SET col1='abc' WHERE id<100';
FDQuery.ExecSQL;

我们如何获得受影响的行数?

来自 MSSQL 数据库的 ADO returns 中的相同查询受影响的行数。

AffectedCount:=ADOQuery.ExecSQL;

有很多方法。


n := FDConnection1.ExecSQL('UPDATE table1 SET col1=''abc'' WHERE id<100');

http://docwiki.embarcadero.com/RADStudio/Seattle/en/Executing_Commands_(FireDAC) http://docwiki.embarcadero.com/Libraries/Seattle/en/FireDAC.Comp.Client.TFDCustomConnection.ExecSQL

执行 SQL 命令和 returns 受影响的行数。


FDQuery.SQL.Text:='UPDATE table1 SET col1=''abc'' WHERE id<100';
FDQuery.ExecSQL;
n := FDQuery.RowsAffected;

http://docwiki.embarcadero.com/RADStudio/Seattle/en/Executing_Commands_(FireDAC) http://docwiki.embarcadero.com/Libraries/Seattle/en/FireDAC.Comp.Client.TFDRdbmsDataSet.RowsAffected

获取 DBMS 反馈

使用TFDQuery.RowsAffected 属性获取命令处理的行数(例如,DELETE命令删除的行数。) 注意:对于 MS SQL 服务器,当存储过程或 table 触发器省略 SET NOCOUNT ON 时,RowsAffected 可能意外地等于 -1。然后,使用 TFDQuery.RecordCount 属性 获取获取的行数。


https://www.sqlite.org/lang_corefunc.html#changes

FDQuery.SQL.Text:='UPDATE table1 SET col1=''abc'' WHERE id<100';
FDQuery.ExecSQL;
FDQuery.SQL.Text:='SELECT changes()';
FDQuery.Open;
n := FDQuery.Fields[0].AsInteger;

http://docwiki.embarcadero.com/Libraries/Seattle//en/Data.DB.TDataSet.PSExecuteStatement

PSExecuteStatement returns 执行 ASQL.

影响的行数

不过我不知道 AnyDAC 是否实现了这个。