Gestion des valeurs nulles dans les variantes à l'aide de Delphi
Je travaille avec un composant COM qui expose beaucoup de Variant
propriétés, mais parfois, ces valeurs sont nulles. Quand j'essaie de convertir ces valeurs en chaîne (ou un autre type Delphi) la requête soulève une exception comme ceci:
N'a pas pu convertir la variante de type (Null) type (String)
Mais si j'utilise .net pour appeler les mêmes propriétés et les valeurs sont nulles, sans exception, sont soulevées et les valeurs null sont traités comme des chaînes vides.
Ma question il y a un moyen de gérer ces valeurs null à partir de Delphi éviter ces exceptions?
Merci d'avance.
source d'informationauteur Salvador
Vous devez vous connecter pour publier un commentaire.
Essayez de définir NullStrictConvert à False.
Que c'est une variable globale, je l'utilise comme suit afin de minimiser les effets secondaires:
(En réalité, j'ai fait un tuteur de l'interface de ce.)
NB: Lorsque c'est possible, je préfère un code comme Warren'.
La accepté de répondre à des modifications d'un paramètre global, et pourrait avoir des effets secondaires indésirables sur le fonctionnement d'un autre code de travail avant de le changer.
D'abord, vous pouvez simplement utiliser
VarToStrDef
d'autre part, si vous devez fournir certaines fonctionnalités autres que cela, alors je voudrais avoir mon code d'appeler mon propre fonction MyVarToStr, et de faire comme ceci:Puisqu'il semble que VarToStrDef devrait être assez, je veux simplement démontrer que c'est mieux d'écrire votre code et d'appel de votre propre code, que d'essayer de "changer globalement" le comportement par défaut de la VCL/RTL le code de bibliothèque.
C'est un comportement documenté de
VarToStr
fonction. Il n'est pas nécessaire de réinventer la roue.Null variante est de type distinct (oui, c'est un type, et non pas simplement une valeur), qui désigne soit manquants ou inconnu de données. Donc, strictement parlant, régulière variante dynamique de frappe ne devrait pas arriver avec
Null
valeurs (illustré et reflétées dans RTL par défaut).donné:
meilleur code
relativement bon code
mauvais code
encore pire code
REMARQUE: Plus tard Delphi.NET présente exactement le même comportement sur Null variantes, afin OP remarque .NET est discutable.
..à partir de user422039 code VarToStr sinon S:=V relais sur une conversion implicite qui peut créer des résultats différents sur les différentes environnement:
VarToStr()
etVarToStrDef()
de la bonne et de la bonne façon de convertir une valeur NullVariant
à unString
comme ils explicitially vérifier les valeurs Null en interne.