Structure conditionnelle et variants

Résolu/Fermé
vrachid Messages postés 109 Date d'inscription lundi 6 mars 2006 Statut Membre Dernière intervention 5 octobre 2011 - 15 nov. 2009 à 14:57
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 - 15 nov. 2009 à 18:41
Bonjour à tous,
pouvez vous m'aider svp à comprendre pourquoi ce code ne fonctionne pas ?
j'ai une variable de type string à la quelle je veux ajouter du texte mais sur une condition, genre si query1.fieldvalues[]<>'' alors....

if DM.TCab.FieldValues['Tel2'] <> '' then
begin
info_cab:=info_cab + '/ ' + DM.TCab.FieldValues['Tel2'];
end;

à l'execution je reçois ce message d'erreur:
impossible de convertir un variant de type "Null" en string.
je ne comprend pas pourquoi il essaye de convertir alors que j'ai mis une condition.

merci d'avance.

3 réponses

ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
15 nov. 2009 à 17:24
Salut,

puisque tu appelles ton field par son nom, n'utilise pas FieldValues qui renvoie un variant (c'est plus lent).

if DM.TCab.FieldByName('Tel2').asString <> '' then
begin
info_cab:=info_cab + '/ ' + DM.TCab.FieldByName('Tel2').asString;
end;

A +
Thierry
3
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
15 nov. 2009 à 18:41
"null" est différent d'une chaine vide, tout simplement.
En revanche, si tu utilisais des chaînes au lieu de variants (trop coûteux en temps d'exécution), cela pourrait donner :

if DM.TCab.FieldByName['Tel2'].AsString <> '' then
begin
  info_cab:= info_cab + '/ ' + DM.TCab.FieldByName['Tel2'].AsString;
end;

Extrait de l'aide en ligne :
" Remarque : Comme FieldValues utilise toujours des Variants,c'est une méthode parfois plus lente pour accéder aux données que l'utilisation du format natif du champ (par exemple une propriétéAsXXX du champ),en particulier dans les applications qui traitent de gros volumes de données. "
Mais, si tu tiens absolument à utiliser des variants, tu dois vérifier que ce variant n'est pas null grâce à la fonction varIsNull et tu peux alors écrire :
if not VarIsNull(DM.TCab.FieldValues['Tel2']) then
begin
  info_cab: =info_cab + '/ ' + DM.TCab.FieldValues['Tel2'];
end; 


8000 Lévriers 'galgos' par an sont torturés et massacrés en Espagne
May Delphi be with you

Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
3
vrachid Messages postés 109 Date d'inscription lundi 6 mars 2006 Statut Membre Dernière intervention 5 octobre 2011
15 nov. 2009 à 17:42
merci à tous ça marche très bien
Merci Therry
0
Rejoignez-nous