Spécifie le composant source de données depuis lequel on extrait les valeurs de champ en cours à utiliser pour les paramètres de même nom dans l'instruction SQL de la requête ADO
Description
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.Si,par exemple,la propriétéSQL de TADOQuery contient l'instruction SQL suivante et si l'ensemble de données désignépar DataSource a un champ CustNo,la valeur de l'enregistrement en cours 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 désigner un composant 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 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éPrepared du composant requête ADO avant d'exécuter la requête.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éParameters ou la méthode ParamByName,il n'est pas nécessaire d'initialiser DataSource.L'exemple suivant illustre la manière d'affecter ADOQuery1 àla propriétéDataSource de ADOQuery2,de préparer ADOQuery2 et de l'activer*:
withADOQuery2 do begin
DataSource :=DataSource1;
Prepared :=True;
Open;
end;
ADOQuery2->DataSource =DataSource1;
ADOQuery2->Prepared =true;
ADOQuery2->Open();
Si l'instruction SQL de TADOQuery 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 suivante utilise l'instruction INSERT et utilise 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é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ée via la propriétéDataSource,le paramètre CustNo reçoit automatiquement une valeur.
withADOQuery2 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.Toute valeur définie par code,par exemple en utilisant la propriétéParameters ou la méthode ParamByName,est remplacée par les 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.
Partager