2016-12-25 514 views
3

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

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

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

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

AffectedCount:=ADOQuery.ExecSQL; 

回答

5

有很多方法。


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是否实现了这个。