Utilisation des champs ADT

De RAD Studio
Aller à : navigation, rechercher

Remonter à Manipulation des composants champ - Index

Il s'agit de types définis par l'utilisateur, créés sur le serveur, similaires au type enregistrement. Un type de champ ADT peut contenir la plupart des champ scalaires, des champs tableau, des champs de référence et des champs ADT imbriqués.

Il existe plusieurs façons d'accéder aux données des types de champ ADT. Elles sont illustrées dans les exemples suivants, qui affectent une valeur de champ enfant à une zone de saisie appelée CityEdit et utilisent la structure ADT suivante :

Address
  Street
  City
  State
  Zip

Utilisation de composants champ persistant

La façon la plus facile d'accéder à des valeurs de champ ADT consiste à utiliser des composants champ persistant. Dans le cas de la structure ADT ci-dessus, les champs persistants suivants peuvent être ajoutés à la table Customer à l'aide de l'éditeur de champs :

CustomerAddress: TADTField;
CustomerAddrStreet: TStringField;
CustomerAddrCity: TStringField;
CustomerAddrState: TStringField;
CustomerAddrZip: TStringField;

A partir de ces champs persistants, vous pouvez accéder simplement aux champs enfants d'un champ ADT par nom :



 CityEdit.Text := CustomerAddrCity.AsString;



 CityEdit->Text = CustomerAddrCity->AsString;



Bien que les champs persistants représentent la façon la plus facile d'accéder aux champs enfants ADT, il est impossible de les utiliser si la structure de l'ensemble de données est inconnue lors de la conception. Lorsque vous accédez à des champs enfants ADT sans utiliser de champs persistants, vous devez attribuer la valeur True à la propriété ObjectView de l'ensemble de données.

Utilisation de la méthode FieldByName d'un ensemble de données

Vous pouvez accéder aux enfants d'un champ ADT à l'aide de la méthode FieldByName de l'ensemble de données en qualifiant le nom du champ enfant à partir du nom du champ ADT :



 CityEdit.Text := Customer.FieldByName('Address.City').AsString;



Utilisation de la propriété FieldValues d'un ensemble de données

Vous pouvez également utiliser des noms de champ qualifiés avec la propriété FieldValues d'un ensemble de données :



 CityEdit.Text := Customer['Address.City'];



 CityEdit->Text = Customer->FieldValues["Address.City"];



Vous pouvez ignorer le nom de la propriété (FieldValues) car FieldValues est la propriété par défaut de l'ensemble de données.

Remarque :  A la différence des autres méthodes disponibles à l'exécution pour accéder aux valeurs de champs enfants ADT, la propriété FieldValues fonctionne même si la propriété ObjectView de l'ensemble de données vaut False.

Utilisation de la propriété FieldValues d'un champ ADT

Vous pouvez accéder à la valeur d'un champ enfant avec la propriété FieldValues de TADTField. FieldValues accepte et renvoie un Variant, elle peut donc gérer et convertir des champs de tout type. Le paramètre d'index accepte une valeur entière qui spécifie le décalage du champ.



 CityEdit.Text := TADTField(Customer.FieldByName('Address')).FieldValues[1];



 CityEdit->Text = ((TADTField*)Customer->FieldByName("Address"))->FieldValues[1];



FieldValues étant la propriété par défaut de TADTField, le nom de propriété (FieldValues) peut être ignoré. Par conséquent, l'instruction suivante est équivalente à la précédente :



 CityEdit.Text := TADTField(Customer.FieldByName('Address'))[1];



Utilisation de la propriété Fields d'un champ ADT

Chaque champ ADT possède une propriété Fields analogue à la propriété Fields d'un ensemble de données. De même que la propriété Fields d'un ensemble de données, vous pouvez l'utiliser pour accéder aux champs enfants par position :



 CityEdit.Text := TADTField(Customer.FieldByName('Address')).Fields[1].AsString;



 CityEdit->Text = ((TADTField*)Customer->FieldByName("Address"))->Fields->



ou par nom :



 CityEdit.Text := TADTField(Customer.FieldByName('Address')).Fields.FieldByName('City').AsString;



 CityEdit->Text = ((TADTField*)Customer->FieldByName("Address"))->



 CityEdit->Text = Customer->FieldByName("Address.City")->AsString;



Voir aussi