Exécution de requêtes qui ne renvoient pas d'ensemble de résultats
Remonter à Utilisation d'ensembles de données de type requête
Quand une requête renvoie un ensemble d'enregistrements (comme une requête SELECT), vous exécutez la requête de la même façon que vous remplissez d'enregistrements un ensemble de données : en définissant Active par True ou en appelant la méthode Open.
Mais, de nombreuses commandes SQL ne renvoient pas d'enregistrement. De telles commandes comprennent les instructions DDL (Data Definition Language) ou DML (Data Manipulation Language) autres que les instructions SELECT (par exemple, les commandes INSERT, DELETE, UPDATE, CREATE INDEX et ALTER TABLE ne renvoient pas d'enregistrement).
Pour tous les ensembles de données de type requête, vous pouvez exécuter une requête qui ne renvoie pas d'ensemble de résultats en appelant ExecSQL :
CustomerQuery.ExecSQL; { la requête ne renvoie pas d'ensemble de résultats }
CustomerQuery->ExecSQL(); // Ne renvoie pas d'ensemble de résultats
Conseil : Si vous exécutez la requête plusieurs fois, il est recommandé d'affecter à la propriété Prepared la valeur True.
Même si la requête ne renvoie aucun enregistrement, vous pouvez vouloir connaître le nombre d'enregistrements qu'elle affecte (par exemple, le nombre d'enregistrements supprimés par une requête DELETE). La propriété RowsAffected donne le nombre d'enregistrements affectés après l'appel de la méthode ExecSQL.
Conseil : Quand vous ne savez pas au moment de la conception si la requête renvoie un ensemble de résultats (par exemple, si l'utilisateur fournit la requête à l'exécution de façon dynamique), vous pouvez programmer les deux types d'instructions d'exécution de la requête dans un bloc try...except. Placez un appel à la méthode Open dans la clause try. Une requête d'action est exécutée quand la requête est activée avec la méthode Open, mais, en plus, une exception est déclenchée. Vérifiez l'exception et supprimez-la si elle indique simplement l'absence d'ensemble de résultats. Par exemple, TQuery l'indique par une exception ENoResultSet.