Conversion des valeurs de champs
Remonter à Affichage, conversion et accès aux valeurs des champs
Le rôle de ces propriétés est de convertir un type de données en un autre. Par exemple, la propriété AsString convertit les valeurs numériques et booléennes en représentations chaîne. Le tableau suivant donne la liste des propriétés de conversion des composants champ et indique celles conseillées en fonction de leur classe :
Composants champ | AsVariant | AsString | AsInteger | AsFloat, AsCurrency, AsBCD | AsDateTime, AsSQLTimeStamp | AsBoolean |
---|---|---|---|---|---|---|
TStringField |
oui |
ND |
oui |
oui |
oui |
oui |
TWideStringField |
oui |
oui |
oui |
oui |
oui |
oui |
TIntegerField |
oui |
oui |
ND |
oui |
||
TSmallIntField |
oui |
oui |
oui |
oui |
||
TWordField |
oui |
oui |
oui |
oui |
||
TLargeintField |
oui |
oui |
oui |
oui |
||
TFloatField |
oui |
oui |
oui |
oui |
||
TCurrencyField |
oui |
oui |
oui |
oui |
||
TBCDField |
oui |
oui |
oui |
oui |
||
TFMTBCDField |
oui |
oui |
oui |
oui |
||
TDateTimeField |
oui |
oui |
oui |
oui |
||
TDateField |
oui |
oui |
oui |
oui |
||
TTimeField |
oui |
oui |
oui |
oui |
||
TSQLTimeStampField |
oui |
oui |
oui |
oui |
||
TBooleanField |
oui |
oui |
||||
TBytesField |
oui |
oui |
||||
TVarBytesField |
oui |
oui |
||||
TBlobField |
oui |
oui |
||||
TMemoField |
oui |
oui |
||||
TGraphicField |
oui |
oui |
||||
TVariantField |
ND |
oui |
oui |
oui |
oui |
oui |
TAggregateField |
oui |
oui |
Vous remarquerez que certaines colonnes du tableau font référence à plusieurs propriétés de conversion (telles que AsFloat, AsCurrency et AsBCD). En effet, tous les types de données de champ qui prennent en charge l'une de ces propriétés prennent également en charge les autres.
Vous remarquerez également que la propriété AsVariant peut traduire tous les types de données. Pour tout type de données ne figurant pas dans la liste ci-dessus, AsVariant est également disponible (et constitue, de fait, la seule option). Utilisez AsVariant en cas de doute.
Il est des cas où la conversion n'est pas possible. Par exemple, AsDateTime permet de convertir une chaîne au format date, heure ou date/heure seulement si la valeur de la chaîne est dans un format date/heure identifiable. L'échec d'une tentative de conversion a pour effet de provoquer une exception.
Dans certains autres cas, la conversion est possible, mais les résultats sont parfois imprévisibles. Par exemple, que signifie la conversion d'une valeur Data.DB.TDateTimeField au format flottant ? AsFloat convertit la partie date du champ en nombre de jours à partir du 31/12/1899 et la partie heure du champ en une fraction de 24 heures. Le tableau suivant donne la liste des conversions autorisées qui donnent des résultats spéciaux :
Résultats de conversion spéciaux :
Conversion | Résultat |
---|---|
De String à Boolean |
Convertit "True", "False", "Yes" et "No" en valeur booléenne. Les autres valeurs provoquent une exception. |
De Float à Integer |
Arrondit la valeur à virgule flottante à l'entier le plus proche. |
De DateTime ou SQLTimeStamp à Float |
Convertit la date en nombre de jours à partir du 31 décembre 1899 et l'heure en fraction de 24 heures. |
De Boolean à String |
Convertit toute valeur booléenne en "True" ou "False". |
Dans les autres cas, la conversion est totalement impossible. Dans ces cas, toute tentative de conversion déclenche également une exception.
La conversion a toujours lieu avant l'assignation. Par exemple, l'instruction ci-dessous convertit la valeur de CustomersCustNo en chaîne et assigne celle-ci au texte d'un contrôle de saisie :
Edit1.Text := CustomersCustNo.AsString;
Edit1->Text = CustomersCustNo->AsString;
A l'inverse, l'instruction suivante assigne le texte d'un contrôle de saisie au champ CustomersCustNo en tant qu'entier :
MyTableMyField.AsInteger := StrToInt(Edit1.Text);
MyTableMyField->AsInteger = StrToInt(Edit1->Text);