FireDAC.Comp.Client.TFDCustomQuery.ExecSQL

提供: RAD Studio API Documentation
移動先: 案内検索

Delphi

procedure ExecSQL; overload;
function ExecSQL(AExecDirect: Boolean): LongInt; overload;
function ExecSQL(const ASQL: String): LongInt; overload;
function ExecSQL(const ASQL: String; const AParams: array of Variant): LongInt; overload;
function ExecSQL(const ASQL: String; const AParams: array of Variant;  const ATypes: array of TFieldType): LongInt; overload;

C++

void __fastcall ExecSQL()/* overload */;
int __fastcall ExecSQL(bool AExecDirect)/* overload */;
int __fastcall ExecSQL(const System::UnicodeString ASQL)/* overload */;
int __fastcall ExecSQL(const System::UnicodeString ASQL, const System::Variant *AParams, const int AParams_High)/* overload */;
int __fastcall ExecSQL(const System::UnicodeString ASQL, const System::Variant *AParams, const int AParams_High, const Data::Db::TFieldType *ATypes, const int ATypes_High)/* overload */;

プロパティ

種類 可視性 ソース ユニット
procedure
function
public
FireDAC.Comp.Client.pas
FireDAC.Comp.Client.hpp
FireDAC.Comp.Client TFDCustomQuery

説明

SQL 文を実行します。

ExecSQL を呼び出すと、現在この SQL プロパティに割り当てられている SQL 文を実行することができます。

このメソッドは、以下のようにオーバーロード(多重定義)されています。

  • 第1オーバーロード メソッドは、このクエリに対する SQL 文を実行します。

カーソルを返す SELECT 文やその他の場合は、ExecSQL の代わりに Open を呼び出します。FireDAC は、コマンドがカーソルを返すのを認識した場合、「[FireDAC][Phys]-310. Cannot execute command returning results set.(結果セットを返すコマンドは実行できません。)」を、ExecSQL に対して発生させます。これは正しくない場合があり、例えば、次のようなバッチ コマンドなどの場合です:

 SELECT f1 INTO @v1 FROM myTab1 WHERE ...;
 INSERT INTO myTab2 VALUES (@v1 + 1, ...)
 
 // 標準パラメータ化 SQL 実行
 FDQuery1.SQL.Text := 'insert into mytab values (:id, :name)';
 FDQuery1.Params[0].AsInteger := 100;
 FDQuery1.Params[0].AsString := 'qwe';
 FDQuery1.ExecSQL;
 
 // [FireDAC][Phys]-310 を避ける
 FDQuery1.SQL.Clear;
 FDQuery1.SQL.Add('SELECT f1 INTO @v1 FROM myTab1 WHERE ...;');
 FDQuery1.SQL.Add('INSERT INTO myTab2 VALUES (@v1 + 1, ...)');
 FDQuery1.Command.CommandKind := skInsert;
 FDQuery1.ExecSQL;
  • 第2オーバーロード メソッドは、ASQL で指定された SQL 文、または、ASQL が空の場合には、SQL プロパティに割り当てられた文を実行します。更新された行数を返します。
 
 FDQuery1.ExecSQL('create table ...');
  • 第3オーバーロード メソッドは、ASQL で指定された SQL 文、または、ASQL が空の場合には、SQL プロパティに割り当てられた文を実行します。 更新された行数を返します。 AParams は、パラメータ値からなるオープン配列を表します。
 
 //例 1
 FDQuery1.ExecSQL('insert into mytab (f1, f2) values (:f1, :f2)', [100, 'qweqwe']);
 
 //例 2
 FDQuery1.SQL.Text := 'insert into mytab (f1, f2) values (:f1, :f2)';
 FDQuery1.Params[0].DataType := ftInteger;
 FDQuery1.Params[1].DataType := ftWideString;
 FDQuery1.ExecSQL('', [100, 'qweqwe']);
 FDQuery1.ExecSQL('', [101, 'asdasd']);
 FDQuery1.ExecSQL('', [102, 'zxczxc']);
  • 第4オーバーロード メソッドは、ASQL で指定された SQL 文、または、ASQL が空の場合には、SQL プロパティに割り当てられた文を実行します。 更新された行数を返します。 AParams は、パラメータ値からなるオープン配列を表します。

ATypes は、クエリに割り当てられる、パラメータのデータ型からなるオープン配列を表します。

 
 FDQuery1.ExecSQL('insert into mytab (f1, f2) values (:f1, :f2)',
   [100, 'qweqwe'], [ftInteger, ftWideString]);

ExecSQL を使用すると、データへのカーソルを返さないクエリを実行します(INSERT、UPDATE、DELETE、CREATE TABLE など)。配列 DML の場合、ExecuteExecSQL の代わりに呼び出します。

ExecSQL は、実行する SQL プロパティ内の文を準備します(まだ準備されていない場合)。パフォーマンスのスピードを上げるには、アプリケーションは、1回目の際に、ExecSQL を呼び出す前に Prepare を通常呼び出さなければなりません。

ResourceOptions.CmdExecMode を使用すると、非同期実行モードを制御することができます。そして、ResourceOptions.CmdExecTimeout では、コマンドの最大実行回数を設定します。その回数のコマンドの後は、実行がキャンセルされ、例外が発生します。

コマンド実行をキャンセルするには、TFDAdaptedDataSet.AbortJob を使用します。

コマンド実行の前には、BeforeExecute イベントが発生します。サーバーがコマンド実行エラーを返した場合、FireDAC は例外を発生させます。これは、OnError イベント内で解析できます。コマンド実行が完了した後には、AfterExecute イベントが発生します。

関連項目