在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;
答案 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是否实现了这一点。