Utilisation des champs de référence

De RAD Studio
Aller à : navigation, rechercher

Remonter à Manipulation des composants champ - Index

Les champs de référence stockent un pointeur ou une référence vers un autre objet ADT. Cet objet ADT est un enregistrement unique d'une autre table objet. Les champs de référence font toujours référence à un enregistrement unique d'un ensemble de données (table objet). Les données contenues dans l'objet référencé sont en fait renvoyées dans un ensemble de données imbriqué mais sont aussi accessibles via la propriété Fields sur le composant TReferenceField.

Affichage des champs de référence

Dans un contrôle Vcl.DBGrids.TDBGrid, un champ de référence est désigné dans chaque cellule de la colonne de l'ensemble de données avec (Reference) et, à l'exécution, avec un bouton à points de suspension sur la droite. A l'exécution, le fait de cliquer sur ce bouton appelle une nouvelle fiche dont la grille affiche l'objet associé au champ de référence de l'enregistrement en cours.

Cette fiche peut aussi être appelée par programmation avec la méthode ShowPopupEditor. Par exemple, si la septième colonne de la grille représente un champ de référence, le code suivant affiche l'objet associé à ce champ pour l'enregistrement en cours.



 DBGrid1.ShowPopupEditor(DBGrid1.Columns[7]);



 DBGrid1->ShowPopupEditor(DBGrid1->Columns->Items[7], -1, -1);



Accès aux données d'un champ de référence

Vous pouvez accéder aux données d'un champ de référence de la même façon que vous accédez à un ensemble de données imbriqué.

Pour accéder aux données d'un champ de référence

  1. Créez un objet Data.DB.TDataSetField persistant en appelant l'éditeur de champ de l'ensemble de données parent.
  2. Créez un ensemble de données représentant la valeur de ce champ ensemble de données.
  3. Affectez à la propriété DataSetField de l'ensemble de données créé à l'étape 2 le champ ensemble de données persistant créé à l'étape 1.

Si la référence est attribuée, l'ensemble de données de référence contient un enregistrement unique, avec les données référencées. Si la référence vaut null, l'ensemble de données de référence est vide.

Vous pouvez également utiliser la propriété Fields du champ de référence pour accéder aux données d'un champ de référence. Par exemple, les lignes suivantes sont équivalentes et affectent des données du champ de référence CustomerRefCity à une zone de saisie appelée CityEdit :



 CityEdit.Text := CustomerRefCity.Fields[1].AsString;
 CityEdit.Text := CustomerRefCity.NestedDataSet.Fields[1].AsString;



 CityEdit->Text = CustomerADDRESS_REF->NestedDataSet->Fields->Fields[1]->AsString;



Lorsque les données d'un champ référence sont modifiées, c'est en fait les données référencées qui sont modifiées.

Pour affecter une valeur à un champ référence, vous devez d'abord utiliser une instruction SELECT pour sélectionner la référence dans la table et ensuite lui attribuer la valeur. Par exemple :



 var
   AddressQuery: TQuery;
   CustomerAddressRef: TReferenceField;
 begin
   AddressQuery.SQL.Text := 'SELECT REF(A) FROM AddressTable A WHERE A.City = ''San   Francisco''';
   AddressQuery.Open;
   CustomerAddressRef.Assign(AddressQuery.Fields[0]);
 end;



 AddressQuery->SQL->Text = "SELECT REF(A) FROM AddressTable A WHERE A.City = "San Francisco"";
 AddressQuery->Open();
 CustomerAddressRef->Assign(AddressQuery->Fields->Fields[0]);



Voir aussi