Spécification de la requête

De RAD Studio
Aller à : navigation, rechercher

Remonter à Utilisation d'ensembles de données de type requête


Pour les véritables ensembles de données de type requête, vous utilisez la propriété SQL pour spécifier l'instruction SQL à exécuter par l'ensemble de données. Certains ensembles de données, comme TADODataSet, TSQLDataSet et les ensembles de données client, utilisent une propriété CommandText pour faire la même chose.

La plupart des requêtes qui renvoient des enregistrements sont des commandes SELECT. Généralement, elles définissent les champs à inclure, les tables dans lesquelles les sélectionner, les conditions qui limitent les enregistrements à inclure, l'ordre de l'ensemble de données résultant. Par exemple :

SELECT CustNo, OrderNo, SaleDate
FROM Orders
WHERE CustNo = 1225
ORDER BY SaleDate

Les requêtes qui ne renvoient pas d'enregistrements contiennent des instructions qui utilisent des instructions DDL (langage de définition des données) ou DML (langage de manipulation des données) autres que les instructions SELECT (Par exemple, les commandes INSERT, DELETE, UPDATE, CREATE INDEX et ALTER TABLE ne renvoient aucun enregistrement). Le langage utilisé dans les commandes est spécifique au serveur mais généralement conforme au standard SQL-92 du langage SQL.

La commande SQL que vous exécutez doit être acceptable pour le serveur que vous utilisez. Les ensembles de données n'évaluent pas la commande SQL et ne l'exécutent pas. Ils transmettent simplement la commande au serveur pour son exécution. Dans la plupart des cas, la commande SQL doit être constituée d'une seule instruction SQL complète, même si cette instruction peut être aussi complexe que nécessaire (par exemple, une instruction SELECT avec une clause WHERE qui utilise plusieurs opérateurs logiques imbriqués comme AND et OR). Certains serveurs supportent également la syntaxe "batch" qui autorise plusieurs instructions ; si votre serveur supporte cette syntaxe, vous pouvez entrer plusieurs instructions pour spécifier la requête.

Les instructions SQL utilisées par les requêtes peuvent être textuelles ou peuvent contenir des paramètres à remplacer. Les requêtes qui utilisent des paramètres sont appelées requêtes paramétrées. Quand vous utilisez des requêtes paramétrées, les valeurs réelles affectées aux paramètres sont insérées dans la requête avant d'exécuter cette dernière. L'utilisation des requêtes paramétrées est très souple, car vous pouvez, à l'exécution, changer la vue d'un utilisateur et accéder aux données à la volée, sans avoir à modifier l'instruction SQL. Pour plus d'informations sur les requêtes paramétrées, voir Utilisation de paramètres dans les requêtes.

Spécification d'une requête en utilisant la propriété SQL

Quand vous utilisez un véritable ensemble de données de type requête (TQuery, TADOQuery, TSQLQuery ou TIBQuery), affectez la requête à la propriété SQL. La propriété SQL est un objet TStrings. Chaque chaîne différente de cet objet TStrings est une ligne distincte de la requête. L'utilisation de plusieurs lignes n'affecte pas la façon dont la requête s'exécute sur le serveur, mais peut faciliter la modification et le débogage de la requête si l'instruction est divisée en unités logiques :



 MyQuery.Close;
 MyQuery.SQL.Clear;
 MyQuery.SQL.Add('SELECT CustNo, OrderNO, SaleDate');
 MyQuery.SQL.Add(' FROM Orders');
 MyQuery.SQL.Add('ORDER BY SaleDate');
 MyQuery.Open;



 MyQuery->Close();
 MyQuery->SQL->Clear();
 MyQuery->SQL->Add("SELECT CustNo, OrderNO, SaleDate");
 MyQuery->SQL->Add("FROM Orders");
 MyQuery->SQL->Add("ORDER BY SaleDate");
 MyQuery->Open();



Le code ci-après montre la modification d'une seule ligne dans une instruction SQL existante. Dans ce cas, la clause ORDER BY existe déjà dans la troisième ligne de l'instruction. Elle est référencée via la propriété SQL en utilisant un index de 2.



 MyQuery.SQL[2] := 'ORDER BY OrderNo';



 MyQuery->SQL->Strings[2] = "ORDER BY OrderNO";



Remarque :  L'ensemble de données doit être fermé lorsque vous spécifiez ou modifiez la propriété SQL.

Pendant la conception, utilisez l'éditeur de liste de chaînes pour spécifier la requête. Cliquez sur le bouton points de suspension de la propriété SQL, dans l'inspecteur d'objets, pour afficher l'éditeur de liste de chaînes.

Remarque :  Avec certaines versions de Delphi, si vous utilisez TQuery, vous pouvez aussi utiliser le constructeur SQL pour construire une requête basée sur une représentation visible des tables et des champs d'une base de données. Pour utiliser le constructeur SQL, sélectionnez le composant requête, cliquez avec le bouton droit pour appeler le menu contextuel et choisissez l'éditeur de requêtes graphique. Pour apprendre à utiliser le constructeur de requêtes, ouvrez-le et faites appel à son aide en ligne.

Comme la propriété SQL est un objet TStrings, vous pouvez charger le texte de la requête à partir d'un fichier, en appelant la méthode TStrings.LoadFromFile :



 MyQuery.SQL.LoadFromFile('custquery.sql');



 MyQuery->SQL->LoadFromFile("custquery.sql");



Vous pouvez aussi utiliser la méthode Assign de la propriété SQL pour copier le contenu d'un objet liste de chaînes dans la propriété SQL. La méthode Assign efface automatiquement le contenu en cours de la propriété SQL avant de copier la nouvelle instruction :



 MyQuery.SQL.Assign(Memo1.Lines);



 MyQuery->SQL->Assign(Memo1->Lines);



Spécification d'une requête en utilisant la propriété CommandText

Quand vous utilisez TADODataSet, TSQLDataSet ou un ensemble de données client, affectez le texte d'une instruction de requête à la propriété CommandText :



 MyQuery.CommandText := 'SELECT CustName, Address FROM Customer';



 MyQuery->CommandText = "SELECT CustName, Address FROM Customer";



Pendant la conception, vous pouvez taper directement la requête dans l'inspecteur d'objets, ou, si l'ensemble de données SQL dispose déjà d'une connexion à la base de données active, vous pouvez cliquer sur le bouton points de suspension de la propriété CommandText pour afficher l'éditeur de texte de commande. L'éditeur de CommandText énumère les tables disponibles et les champs contenus dans ces tables pour faciliter la composition de vos requêtes.

Voir aussi