Envoi de commandes au serveur

De RAD Studio
Aller à : navigation, rechercher

Remonter à Connexion aux bases de données - Index


Tous les composants connexion de base de données, à l'exception de TIBDatabase, permettent d'exécuter des instructions SQL sur le serveur associé en appelant la méthode Execute. Bien que la méthode Execute puisse renvoyer un curseur lorsque l'instruction est une instruction SELECT, cette utilisation n'est pas recommandée. La meilleure façon d'exécuter des instructions qui renvoient des données consiste à utiliser un ensemble de données.

La méthode Execute est très pratique pour exécuter des instructions SQL simples qui ne renvoient pas d'enregistrements. Parmi ces instructions figurent les instructions DDL (Data Definition Language, langage de définition de données), qui manipulent ou créent des métadonnées de base de données, telles que CREATE INDEX, ALTER TABLE et DROP DOMAIN. Certaines instructions SQL DML (Data Manipulation Language, langage de manipulation de données) ne renvoient pas non plus d'ensemble de résultat. Les instructions DML réalisant une action sur des données mais ne renvoyant pas d'ensemble de résultat sont les suivantes : INSERT, DELETE et UPDATE.

La syntaxe de la méthode Execute dépend du type de connexion :

  • Dans le cas de TDatabase, Execute possède quatre paramètres : une chaîne qui spécifie une instruction SQL unique à exécuter, un objet Data.DB.TParams qui fournit toutes les valeurs de paramètre de l'instruction, une valeur booléenne qui indique si l'instruction doit être placée en mémoire cache en vue d'un appel ultérieur et un pointeur vers un curseur BDE pouvant être renvoyé (il est recommandé d'indiquer nil).
  • Dans le cas de TADOConnection, il existe deux versions de la méthode Execute. La première possède une valeur WideString qui spécifie l'instruction SQL et un second paramètre qui désigne un ensemble d'options qui déterminent si l'instruction est exécutée de façon asynchrone et si elle renvoie des enregistrements. Cette première syntaxe renvoie une interface pour les enregistrements renvoyés. La seconde syntaxe possède une valeur WideString qui spécifie l'instruction SQL, un deuxième paramètre qui renvoie le nombre d'enregistrements affectés par l'exécution de l'instruction et un troisième qui désigne des options, telles que l'exécution ou non de l'instruction de façon asynchrone. Aucune des syntaxes ne permet la transmission de paramètres.
  • Dans le cas de TSQLConnection, Execute possède trois paramètres : une chaîne qui spécifie une instruction SQL unique à exécuter, un objet Data.DB.TParams qui fournit les valeurs de paramètre de cette instruction et un pointeur qui peut recevoir un objet TCustomSQLDataSet créé pour renvoyer les enregistrements.

Remarque :  Execute ne peut exécuter qu'une instruction SQL en même temps. A la différence des utilitaires de script SQL, un seul appel de Execute ne permet pas d'exécuter plusieurs instructions SQL. Pour ce faire, appelez Execute autant de fois que nécessaire.

Il est relativement facile d'exécuter une instruction ne comprenant aucun paramètre. Par exemple, le code suivant exécute une instruction CREATE TABLE (DDL) sans aucun paramètre sur un composant TSQLConnection

 procedure TForm1.CreateTableButtonClick(Sender: TObject);
 var
   SQLstmt: String;
 begin
   SQLConnection1.Connected := True;
   SQLstmt := 'CREATE TABLE NewCusts ' +
     '( ' +
     '  CustNo INTEGER, ' +
     '  Company CHAR(40), ' +
     '  State CHAR(2), ' +
     '  PRIMARY KEY (CustNo) ' +
     ')';
   SQLConnection1.Execute(SQLstmt, nil, nil);
 end;

Pour utiliser des paramètres, vous devez créer un objet Data.DB.TParams. Pour chaque valeur de paramètre, utilisez la méthode TParams.CreateParam afin d'ajouter un objet TParam. Ensuite, utilisez les propriétés de TParam pour décrire le paramètre et définir sa valeur.

Ce processus est illustré dans l'exemple suivant, qui utilise TDatabase pour exécuter une instruction INSERT. L'instruction INSERT possède un paramètre unique nommé : StateParam. Un objet TParams (appelé stmtParams) est créé afin de fournir la valeur "CA" pour ce paramètre.

 procedure TForm1.INSERT_WithParamsButtonClick(Sender: TObject);
 var
   SQLstmt: String;
   stmtParams: TParams;
 begin
   stmtParams := TParams.Create;
   try
     Database1.Connected := True;
     stmtParams.CreateParam(ftString, 'StateParam', ptInput);
     stmtParams.ParamByName('StateParam').AsString := 'CA';
     SQLstmt := 'INSERT INTO "Custom.db" '+
       '(CustNo, Company, State) ' +
       'VALUES (7777, "Robin Dabank Consulting", :StateParam)';
     Database1.Execute(SQLstmt, stmtParams, False, nil);
   finally
     stmtParams.Free;
   end;
 end;

Si l'instruction SQL comprend un paramètre mais que vous ne fournissez pas d'objet TParam pour indiquer sa valeur, l'instruction SQL peut générer une erreur lors de son exécution (cela dépend du type de la base de données utilisée). Si un objet TParam est fourni alors qu'aucun paramètre ne lui correspond dans l'instruction SQL, une exception est déclenchée lorsque l'application tente d'utiliser le TParam.

Voir aussi