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

Avr*_*rob 4 delphi sqlite firedac

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

FDQuery.SQL.Text:='UPDATE table1 SET col1='abc' WHERE id<100';
FDQuery.ExecSQL;
Run Code Online (Sandbox Code Playgroud)

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

ADO中的相同查询从MSSQL数据库返回受影响的行数.

AffectedCount:=ADOQuery.ExecSQL;
Run Code Online (Sandbox Code Playgroud)

Ari*_*The 6

有很多方法.


n := FDConnection1.ExecSQL('UPDATE table1 SET col1=''abc'' WHERE id<100');
Run Code Online (Sandbox Code Playgroud)

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

执行SQL命令并返回受影响的行数.


FDQuery.SQL.Text:='UPDATE table1 SET col1=''abc'' WHERE id<100';
FDQuery.ExecSQL;
n := FDQuery.RowsAffected;
Run Code Online (Sandbox Code Playgroud)

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 Server,当存储过程时,RowsAffected可能意外地等于-1或表触发器省略SET NOCOUNT ON.然后,使用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;
Run Code Online (Sandbox Code Playgroud)

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

PSExecuteStatement返回执行ASQL所影响的行数.

我不知道AnyDAC是否实现了这一点.