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 */;
Propriétés
Type | Visibilité | Source | Unité | Parent |
---|---|---|---|---|
procedure function |
public | FireDAC.Comp.Client.pas FireDAC.Comp.Client.hpp |
FireDAC.Comp.Client | TFDCustomQuery |
Description
Exécute l'instruction SQL.
Appelez ExecSQL pour exécuter l'instruction SQL actuellement affectée à la propriété SQL.
Cette méthode est surchargée :
- La première méthode surchargée exécute l'instruction SQL pour la requête.
Pour les instructions SELECT
et d'autres curseurs de retour appelez Open plutôt que ExecSQL. Si FireDAC a reconnu une commande qui renvoie un curseur, l'erreur "[FireDAC][Phys]-310. Impossible d'exécuter la commande renvoyant l'ensemble de résultats" est déclenchée sur ExecSQL. Cela peut être incorrect, par exemple sur les commandes batch, comme les suivantes :
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;
- La seconde méthode surchargée exécute l'instruction SQL spécifiée dans
ASQL
, ou l'instruction affectée à la propriété SQL, siASQL
est vide. Elle renvoie le nombre de lignes mises à jour.
FDQuery1.ExecSQL('create table ...');
- La troisième méthode surchargée exécute l'instruction SQL spécifiée dans
ASQL
, ou l'instruction affectée à la propriété SQL, siASQL
est vide. Elle renvoie le nombre de lignes mises à jour.AParams
représente un tableau ouvert de valeurs de paramètres.
//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']);
- La quatrième méthode surchargée exécute l'instruction SQL spécifiée dans
ASQL
, ou l'instruction affectée à la propriété SQL, siASQL
est vide. Elle renvoie le nombre de lignes mises à jour.AParams
représente un tableau ouvert de valeurs de paramètres.
ATypes
représente le tableau ouvert de types de données paramètres qui seront affectées pour la requête.
FDQuery1.ExecSQL('insert into mytab (f1, f2) values (:f1, :f2)',
[100, 'qweqwe'], [ftInteger, ftWideString]);
Utilisez ExecSQL pour exécuter des requêtes qui ne renvoyent pas un curseur aux données (comme INSERT, UPDATE, DELETE, CREATE TABLE
).
Pour Array DML, appelez Execute plutôt que ExecSQL.
ExecSQL prépare l'instruction dans la propriété SQL pour l'exécution, si elle n'a pas déjà été préparée. Pour accélérer les performances, une application doit habituellement appeler Prepare avant d'appeler ExecSQL pour la première fois.
Utilisez ResourceOptions.CmdExecMode pour contrôler le mode d'exécution asynchrone et ResourceOptions.CmdExecTimeout pour définir le temps d'exécution maximal de la commande. Après le temps de cette commande, l'exécution est annulée et une exception est déclenchée.
Pour annuler l'exécution de la commande, utilisez TFDAdaptedDataSet.AbortJob.
Avant l'exécution de la commande, l'événement BeforeExecute est déclenché. Si le serveur renvoie une erreur d'exécution de la commande, FireDAC déclenche une exception. Elle peut être analysée dans l'événement OnError. Après la fin de l'exécution de la commande, l'événement AfterExecute est déclenché.