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 文を実行します。
このメソッドは、以下のようにオーバーロードされています。
- 最初のオーバーロード メソッドは、クエリに対して 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;
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 の場合、Execute を ExecSQL の代わりに呼び出します。
ExecSQL は、実行のために、SQL プロパティで文の準備をします(もしそれがまだ準備されていない場合)。パフォーマンスを向上させるには、アプリケーションは、通常、ExecSQL を初めて呼び出す前に、Prepare を呼び出さなければなりません。
ResourceOptions.CmdExecMode を使用して非同期実行モードを制御することができます。 また、ResourceOptions.CmdExecTimeout を使用して、コマンドの最大実行時間を設定することができます。 その時間が過ぎると、 コマンド実行はキャンセルされ、例外が発生します。
コマンド実行をキャンセルするには、TFDAdaptedDataSet.AbortJob を使用します。
コマンド実行の前に、BeforeExecute イベントが発生します。 サーバーがコマンド実行エラーを返すと、FireDAC は例外を発生させます。 これは、OnError イベント内で分析することができます。コマンド実行が完了したのち、AfterExecute イベントが発生します。