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 文を実行します。 

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

  • 最初のオーバーロード メソッドは、クエリに対して 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, ...)
// standard parameterized SQL execution
FDQuery1.SQL.Text := 'insert into mytab values (:id, :name)';
FDQuery1.Params[0].AsInteger := 100;
FDQuery1.Params[0].AsString := 'qwe';
FDQuery1.ExecSQL;

// avoid [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 オーバーロード メソッドは、SQL プロパティに割り当てられている SQL 文を実行します。AExecDirect は、クエリ実行モードを指定します。詳細については、TFDResourceOptions.DirectExecute を参照してください。更新行の数を返します。
function ExecSQL(AExecDirect: Boolean): LongInt; overload;
  • 第 3 オーバーロード メソッドは、ASQL で指定された SQL 文か、ASQL が空の場合には、SQL プロパティに割り当てられた文を実行します。更新行の数を返します。
FDQuery1.ExecSQL('create table ...');
  • 第 4 オーバーロード メソッドは、ASQL で指定された SQL 文か、ASQL が空の場合には、SQL プロパティに割り当てられた文を実行します。 更新行の数を返します。 AParams は、開いているパラーメータ値の配列を表します。
//Example 1
FDQuery1.ExecSQL('insert into mytab (f1, f2) values (:f1, :f2)', [100, 'qweqwe']);

//Example 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']);
  • 第 5 オーバーロード メソッドは、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 プロパティで文の準備をします(もしそれがまだ準備されていない場合)。パフォーマンスを向上させるには、アプリケーションは、通常、ExecSQL を初めて呼び出す前に、Prepare を呼び出さなければなりません。 

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

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

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

関連項目