Data.DB.TDataSet.DataSource

De RAD Studio API Documentation
Aller à : navigation, rechercher

Delphi

property DataSource: TDataSource read GetDataSource;

C++

__property TDataSource* DataSource = {read=GetDataSource};

Propriétés

Type Visibilité  Source Unité  Parent
property public
Data.DB.pas
Data.DB.hpp
Data.DB TDataSet


Description

Représente la source de données d'un autre ensemble de données qui fournit des valeurs à l'ensemble de données.

Telle qu'implémentée dans TDataSet, la propriété DataSource a toujours la valeur nil (Delphi) ou NULL (C++).

Les classes ensemble de données descendantes supportant la spécification d'une source de données redéclarent et implémentent les méthodes d'obtention et de définition de la propriété DataSource.

Par exemple :

Pour Data.Win.ADODB.TADOQuery, qui est un descendant indirect de TDataSet (dérivé de Data.Win.ADODB.TCustomADODataSet), DataSource 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 de la requête ADO.

Initialisez Data.Win.ADODB.TADOQuery.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 définis automatiquement et doivent l'être par programme. Par exemple, si la propriété SQL de Data.Win.ADODB.TADOQuery contient l'instruction SQL suivante et l'ensemble de données référencé via Data.Win.ADODB.TADOQuery.DataSource a un champ CustNo, la valeur de l'enregistrement actuel de cet autre ensemble de données est utilisée dans le paramètre CustNo :

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

La propriété Data.Win.ADODB.TADOQuery.DataSource doit désigner un composant Data.DB.TDataSource lié à un autre composant ensemble de données ; elle ne peut pas pointer sur ce composant requête. L'ensemble de données spécifié dans Data.Win.ADODB.TADOQuery.DataSource doit avoir été créé, rempli et ouvert avant d'essayer de lier les paramètres. Les paramètres sont liés en affectant la valeur True à la propriété Data.Win.ADODB.TADOCommand.Prepared de la requête ADO avant d'exécuter la requête. Il n'est pas nécessaire d'affecter une valeur à la propriété Data.Win.ADODB.TADOQuery.DataSource si l'instruction SQL utilisée par la requête ne contient pas de paramètres, ou si tous les paramètres sont liés par l'application en utilisant la propriété Data.Win.ADODB.TADOCommand.Parameters ou la méthode Data.Win.ADODB.TParameters.ParamByName. L'exemple suivant illustre la manière d'affecter la source de données de ADOQuery1 à la propriété Data.Win.ADODB.TADOQuery.DataSource de ADOQuery2, de préparer ADOQuery2 et de l'activer :

with ADOQuery2 do begin
DataSource := DataSource1;
Prepared := True;
Open;
end;
ADOQuery2->DataSource = DataSource1;
ADOQuery2->Prepared = true;
ADOQuery2->Open();

Si l'instruction SQL de Data.Win.ADODB.TADOQuery est une requête SELECT, celle-ci est exécutée en utilisant les nouvelles valeurs de champ chaque fois que le pointeur d'enregistrement dans l'autre ensemble de données est changé. Il n'est pas nécessaire d'appeler la méthode Data.Win.ADODB.TADOConnection.Open de Data.Win.ADODB.TADOQuery à chaque fois. Cela permet d'utiliser la propriété Data.Win.ADODB.TADOQuery.DataSource pour filtrer dynamiquement l'ensemble des résultats d'une requête, ce qui est utile pour établir une relation maître-détail. Affectez à la propriété Data.Win.ADODB.TADOQuery.DataSource de la requête détail le composant Data.Win.ADODB.TADOQuery.DataSource 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 suivante utilise l'instruction INSERT et contient les paramètres CustNo et CompanyName :

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

Un autre ensemble de données, ADOQuery1 et DataSource1, a un champ CustNo mais pas de champ CompanyName. Si cet ensemble de données est utilisé via la propriété Data.Win.ADODB.TADOQuery.DataSource, une valeur doit être affectée par code au paramètre CompanyName. Comme ADOQuery1 contient un champ CustNo et que ADOQuery1 est référencé via la propriété Data.Win.ADODB.TADOQuery.DataSource, le paramètre CustNo reçoit automatiquement une valeur.

with ADOQuery2 do begin
DataSource := DataSource1;
ParamByName ('CompanyName').AsString := Edit1.Text;
Prepared := True;
ExecSQL;
end;


ADOQuery2->DataSource = DataSource1;
ADOQuery2->ParamByName("CompanyName")->AsString = Edit1->Text;
ADOQuery2->Prepared = true;
ADOQuery2->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 par code, comme en utilisant la propriété Data.Win.ADODB.TADOCommand.Parameters ou la méthode Data.Win.ADODB.TParameters.ParamByName, seront redéfinies 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 Data.Win.ADODB.TADOQuery.DataSource.

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

Voir aussi