Bde.DBTables.TQuery.DataSource

De RAD Studio API Documentation
Aller à : navigation, rechercher

Delphi

property DataSource: TDataSource read GetDataSource write SetDataSource;

C++

__property Data::Db::TDataSource* DataSource = {read=GetDataSource, write=SetDataSource};

Propriétés

Type Visibilité  Source Unité  Parent
property published
Bde.DBTables.pas
Bde.DBTables.hpp
Bde.DBTables TQuery

Description

Spécifie le composant source de données depuis lequel extraire les valeurs de champ en cours à utiliser pour les paramètres de même nom dans l'instruction SQL.

Initialisez DataSource pour renseigner automatiquement les paramètres d'une requête avec la valeur des champs d'un autre ensemble de données. Les paramètres portant le même nom que les champs de l'autre ensemble de données sont remplis avec la valeur des champs. Les paramètres dont le nom n'est pas identique à celui d'un champ de l'autre ensemble de données ne sont pas initialisés automatiquement et doivent l'être par du code. Par exemple, si la propriété SQL de TQuery contient l'instruction SQL suivante et l'ensemble de données référence via DataSource a un champ CustNo, la valeur de l'enregistrement actuel dans cet autre ensemble de données est utilisée dans le paramètre CustNo.

SELECT * FROM Orders O WHERE (O.CustNo = :CustNo)

DataSource doit pointer sur un composant TDataSource lié à un autre composant ensemble de données ; il ne peut pas pointer sur le composant source de données de cette requête.

L'ensemble de données spécifié dans DataSource doit avoir été créé, rempli et ouvert avant d'essayer de lier les paramètres. Les paramètres sont liés en appelant la méthode Prepare de la requête avant d'exécuter la requête.

Conseil :  DataSource est particulièrement utile pour créer une relation maître-détail entre des tables en utilisant une requête liée. Elle est aussi utile pour garantir la liaison des paramètres qui ne sont pas déjà définis dans la propriété Params ou via un appel à la méthode ParamByName.

Il n'est pas nécessaire d'affecter une valeur à la propriété DataSource si l'instruction SQL utilisée par la requête ne contient pas de paramètres, ou si tous les paramètres sont substitués par l'application en utilisant la propriété Params ou la méthode ParamByName. L'exemple ci-dessous affiche le paramétrage de la propriété DataSource de Query2 avec la source de données Query1, en préparant Query2, et en activant Query2.



with Query2 do begin
DataSource := DataSource1;
Prepare;
Open;
end;



Query2->DataSource = DataSource1;
Query2->Prepare();
Query2->Open();



Si l'instruction SQL de TQuery est une requête SELECT, la requête est exécutée en utilisant les nouvelles valeurs de champ à chaque fois que le pointeur d'enregistrement est déplacé dans l'autre ensemble de données. Il n'est pas nécessaire d'appeler à chaque fois la méthode Open de TADOQuery. Cela permet d'utiliser la propriété DataSource pour filtrer dynamiquement l'ensemble d'enregistrements d'une requête, ce qui est utile pour établir une relation maître-détail. Affectez à la propriété DataSource de la requête détail le composant TDataSource de l'ensemble de données maître.

Si l'instruction SQL utilise autre chose qu'une requête SELECT (par exemple INSERT ou UPDATE), les paramètres portant le même nom que les champs de l'autre ensemble de données obtiennent également leurs valeurs mais la requête doit être exécutée explicitement chaque fois que le pointeur d'enregistrement est déplacé dans l'autre ensemble de données. Par exemple, l'instruction SQL ci-dessous utilise l'instruction INSERT et comprend les paramètres CustNo et CompanyName.

INSERT INTO Customer (CustNo, Company) VALUES (:CustNo, :CompanyName)

Un autre ensemble de données, Query1 et DataSource1, a un champ CustNo mais aucun champ CompanyName. Si cet ensemble de données est utilisé via la propriété DataSource, une valeur doit être affectée par code au paramètre CompanyName. Comme Query1 a un champ CustNo et que Query1 est référence avec la propriété DataSource, le paramètre CustNo reçoit automatiquement une valeur.



with Query2 do begin
DataSource := DataSource1;
ParamByName('CompanyName').AsString := Edit1.Text;
Prepare;
ExecSQL;
end;



Query2->DataSource = DataSource1;
Query2->ParamByName("CompanyName")->AsString = Edit1->Text;
Query2->Prepare();
Query2->ExecSQL();



Si l'instruction SQL contient des paramètres portant le même nom que des champs de l'autre ensemble de données, n'affectez pas manuellement de valeur à ces paramètres. Toutes les valeurs définies manuellement, comme en utilisant la propriété Params ou la méthode ParamByName, seront surchargées par des valeurs automatiques. Il faut donner des valeurs par code aux autres paramètres. Ces paramètres ne sont pas affectés par l'initialisation de DataSource.

DataSource peut être spécifiée à l'exécution ou à la conception en utilisant l'inspecteur d'objet. A la conception, sélectionnez le TDataSource souhaité dans la liste déroulante ou saisissez son nom.

Voir aussi