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(void)/* 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 */;
Eigenschaften
Typ | Sichtbarkeit | Quelle | Unit | Übergeordnet |
---|---|---|---|---|
procedure function |
public | FireDAC.Comp.Client.pas FireDAC.Comp.Client.hpp |
FireDAC.Comp.Client | TFDCustomQuery |
Beschreibung
Führt die SQL-Anweisung aus.
Mit ExecSQL können Sie die Anweisung ausführen, die aktuell der Eigenschaft SQL zugewiesen ist.
Diese Methode ist überladen:
- Die erste überladene Methode führt die SQL-Anweisung für die Abfrage aus.
Für SELECT
- und andere Anweisungen, die Cursors zurückgeben, rufen Sie Open anstatt ExecSQL auf. Wenn FireDAC erkennt, dass eine Anwendung einen Cursor zurückgibt, dann wird die Exception "[FireDAC][Phys]-310. Anweisung, die Ergebnismengen zurückgibt, kann nicht ausgeführt werden." bei ExecSQL ausgelöst. Dies kann beispielsweise bei Stapelanweisungen, wie im folgenden Beispiel, nicht korrekt sein:
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;
- Die zweite überladene Methode führt die in
ASQL
angegebene SQL-Anweisung oder die Anweisung, die der Eigenschaft SQL zugewiesen ist, aus, wennASQL
leer ist. Sie gibt die Anzahl der aktualisierten Zeilen zurück.
FDQuery1.ExecSQL('create table ...');
- Die dritte überladene Methode führt die in
ASQL
angegebene SQL-Anweisung oder die Anweisung, die der Eigenschaft SQL zugewiesen ist, aus, wennASQL
leer ist. Sie gibt die Anzahl der aktualisierten Zeilen zurück.AParams
repräsentiert ein offenes Array von Parameterwerten.
//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']);
- Die vierte überladene Methode führt die in
ASQL
angegebene SQL-Anweisung oder die Anweisung, die der Eigenschaft SQL zugewiesen ist, aus, wennASQL
leer ist. Sie gibt die Anzahl der aktualisierten Zeilen zurück.AParams
repräsentiert ein offenes Array von Parameterwerten.
ATypes
repräsentiert ein offenes Array von Parameterdatentypen, die der Abfrage zugewiesen werden.
FDQuery1.ExecSQL('insert into mytab (f1, f2) values (:f1, :f2)',
[100, 'qweqwe'], [ftInteger, ftWideString]);
Mit ExecSQL können Sie Abfragen ausführen, die keinen Cursor auf Daten zurückgeben (wie z.B. INSERT, UPDATE, DELETE, CREATE TABLE
).
Für Array DML rufen Sie Execute anstatt ExecSQL auf.
ExecSQL bereitet die Anweisung in der Eigenschaft SQL für die Ausführung vor, wenn sie noch nicht vorbereitet wurde. Um die Performance zu steigern, sollte in einer Anwendung die Methode Prepare vor dem ersten Aufruf von ExecSQL aufgerufen werden.
Mit ResourceOptions.CmdExecMode können Sie den asynchronen Ausführungsmodus steuern. Mit ResourceOptions.CmdExecTimeout können Sie die maximale Dauer für die Ausführung der Anweisung festlegen. Nach dieser Dauer wird die Ausführung abgebrochen und eine Exception ausgelöst.
Mit TFDAdaptedDataSet.AbortJob brechen Sie die Anweisungsausführung ab.
Vor der Anweisungsausführung wird das Ereignis BeforeExecute ausgelöst. Wenn der Server bei der Anweisungsausführung einen Fehler zurückgibt, dann löst FireDAC eine Exception aus. Der Fehler kann im OnError-Ereignis analysiert werden. Nach dem Abschluss der Anweisungsausführung wird das AfterExecute-Ereignis ausgelöst.