2016-12-25 8 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がこれを実装しているかどうかわかりません。