2016-12-25 512 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是否實現了這個。