Groupes de commandes (FireDAC)

De RAD Studio
Aller à : navigation, rechercher

Remonter à Utilisation des commandes (FireDAC)

Informations générales

Un groupe de commandes est un groupe d'instructions SQL envoyées simultanément d'une application vers un SGBD pour être exécutées. Le SGBD compile les instructions d'un groupe au sein d'un seul plan d'exécution. Les instructions contenues dans ce plan d'exécution sont ensuite exécutées une par une. Cela minimise le trafic réseau et la charge de travail du serveur. Après l'exécution, le SGBD retourne au client les ensembles de résultats produits par les commandes.


Traitement des ensembles de résultats

FireDAC permet de traiter tous les ensembles de résultats un par un, en utilisant la méthode NextRecordSet. Pour activer le traitement de tous les ensembles de résultats, vous devez définir FetchOptions.AutoClose sur False avant d'exécuter une commande. Sinon, après avoir atteint Eof au premier curseur, la commande est fermée et les autres curseurs ignorés.

Voici un exemple avec SQL Server :

FDQuery1.FetchOptions.AutoClose := False;
FDQuery1.SQL.Add('select * from [Orders]');
FDQuery1.SQL.Add('select * from [Order Details]');
FDQuery1.Open; // [Orders] table rows are accessable here
FDQuery1.NextRecordSet; // [Order Details] table rows available here

Une application peut stocker chaque ensemble de résultats dans un ensemble de données séparé, en utilisant les propriétés TFDMemTable et Data. Par exemple :

FDQuery1.FetchOptions.AutoClose := False;
FDQuery1.SQL.Text := 'select * from orders; select * from customers';

FDQuery1.Open;
FDQuery1.FetchAll;
// assign orders records to FDMemTable1
FDMemTable1.Data := FDQuery1.Data;

FDQuery1.NextRecordSet;
FDQuery1.FetchAll;
// assign customers records to FDMemTable2
FDMemTable2.Data := FDQuery1.Data;

FireDAC ignore automatiquement ‎les ensembles de résultats vides ne comportant aucune ligne ni aucune colonne.


SGBD et groupes de commandes

Un SGBD doit prendre en charge les groupes de commandes qui sont exécutés en utilisant FireDAC. Si un SGBD ne supporte pas les groupes de commandes, vous pouvez utiliser les scripts SQL. Les SGBD supportant les groupes de commandes sont les suivants :

SGBD Remarques
IBM DB2 Les commandes doivent être séparées par ';'.
Firebird Utilisez la construction EXECUTE BLOCK.
Informix Les commandes doivent être séparées par ';'. Le groupe peut contenir une seule commande d'accès à la base de données.
Microsoft SQL Server Eventuellement, les commandes peuvent être séparées par ';'.
MySQL Les commandes doivent être séparées par ';'.
Oracle Utilisez la construction de bloc anonyme BEGIN END.
PostgreSQL Les commandes doivent être séparées par ';'.

Un groupe de commandes sans paramètres peut être exécuté si ResourceOptions.DirectExecute est défini sur True. Avec PostgreSQL v >= 9.0, utilisez la construction de bloc anonyme DO BEGIN END.

SQLite Les commandes doivent être séparées par ';'.
SQL Anywhere Eventuellement, les commandes peuvent être séparées par ';'.
Base de données Teradata Les commandes doivent être séparées par ';'.

Par ailleurs, FireDAC supporte complètement les commandes qui retournent plusieurs ensembles de résultats. Voici quelques exemples :

  • Procédures stockées Oracle avec REF CURSOR.
  • Ensembles de résultats Oracle avec curseurs imbriqués.
  • Diverses instructions PostgreSQL de renvoi à un curseur.
Remarque : Pour exécuter plusieurs commandes INSERT/UPDATE/DELETE, vous pouvez utiliser la fonctionnalité Array DML, qui est bien plus efficace pour les grands groupes de commandes.

Voir aussi

Exemples