Structure conditionnelle et variants [Résolu/Fermé]

Messages postés
110
Date d'inscription
lundi 6 mars 2006
Dernière intervention
5 octobre 2011
- 15 nov. 2009 à 14:57 - Dernière réponse :
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
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.
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
424
Date d'inscription
mardi 3 janvier 2006
Dernière intervention
26 novembre 2013
- 15 nov. 2009 à 17:24
3
Merci
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

Merci ThWilliam 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 91 internautes ce mois-ci

Commenter la réponse de ThWilliam
Meilleure réponse
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Dernière intervention
9 janvier 2013
- 15 nov. 2009 à 18:41
3
Merci
"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.

Merci cs_Delphiprog 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 91 internautes ce mois-ci

Commenter la réponse de cs_Delphiprog
Messages postés
110
Date d'inscription
lundi 6 mars 2006
Dernière intervention
5 octobre 2011
- 15 nov. 2009 à 17:42
0
Merci
merci à tous ça marche très bien
Merci Therry
Commenter la réponse de vrachid

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.