FireDAC.Comp.Client.TFDCustomQuery.ExecSQL

De RAD Studio API Documentation
Aller à : navigation, rechercher

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, si ASQL 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, si ASQL 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, si ASQL 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é.

Voir aussi