FireDAC.Comp.Client.TFDCustomQuery.ExecSQL
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;
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 の場合、Execute を ExecSQL の代わりに呼び出します。
ExecSQL は、実行する SQL プロパティ内の文を準備します(まだ準備されていない場合)。パフォーマンスのスピードを上げるには、アプリケーションは、1回目の際に、ExecSQL を呼び出す前に Prepare を通常呼び出さなければなりません。
ResourceOptions.CmdExecMode を使用すると、非同期実行モードを制御することができます。そして、ResourceOptions.CmdExecTimeout では、コマンドの最大実行回数を設定します。その回数のコマンドの後は、実行がキャンセルされ、例外が発生します。
コマンド実行をキャンセルするには、TFDAdaptedDataSet.AbortJob を使用します。
コマンド実行の前には、BeforeExecute イベントが発生します。サーバーがコマンド実行エラーを返した場合、FireDAC は例外を発生させます。これは、OnError イベント内で解析できます。コマンド実行が完了した後には、AfterExecute イベントが発生します。