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

时间:2016-12-25 14:44:07

标签: sqlite delphi firedac

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

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

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

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

AffectedCount:=ADOQuery.ExecSQL;

1 个答案:

答案 0 :(得分:6)

有很多方法。

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命令并返回受影响的行数。

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 Server,当存储过程或表触发器省略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返回执行ASQL所影响的行数。

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