“Non valide utilisation de Null” lors de l'utilisation de Str() avec une valeur Null champ de jeu d'enregistrements, mais Str(Null) fonctionne très bien

Je suis cogner ma tête contre le mur sur celle-ci. Je la regardais quelques vieux de la base de données de reporting code écrit en VB6 et suis tombé sur cette ligne (le code est de déplacer les données à partir d'une "source" de la base de données dans une base de données de rapports):

rsTarget!VehYear = Trim(Str(rsSource!VehYear))

Quand rsSource!VehYear est Null, la ligne ci-dessus génère un "Invalid use of Null" erreur d'exécution. Si je casse sur la ligne ci-dessus et tapez le texte suivant dans le volet exécution:

?rsSource!VehYear

Il sorties Null. Fine, qui fait sens. Ensuite, j'essaie de reproduire l'erreur:

?Str(rsSource!VehYear)

Je un usage incorrect de la valeur Null," erreur.

Cependant, si je tape la commande suivante dans la fenêtre exécution:

?Str(Null)

Je n'ai pas d'erreur. Il a simplement sorties Null.

Si je répète la même expérience avec Trim() au lieu de Str(), tout fonctionne bien. ?Trim(rsSource!VehYear) retourne Null, comme le fait ?Trim(Null). Pas d'erreurs d'exécution.

Donc, ma question est, comment pouvez - Str(rsSource!VehYear) éventuellement jeter un "usage incorrect de la valeur Null," erreur lors de la Str(Null) ne fonctionne pas, quand je savoir que rsSource!VehYear est égal à Null?


Mise à jour: Si je tapez la commande suivante dans la fenêtre exécution, il fonctionne comme prévu (aucune erreur ne se produit):

?Str(rsSource!VehYear.Value)

Ce sorties Null. Maintenant, je sais que rsSource!VehYear est en fait un ADODB.Field exemple, mais Value est par défaut de la propriété, de sorte Str doit être en fonctionnement sur le Value de propriété (qui est Null). Même le message d'erreur"Invalid use of Null") suggère que Str reçoit un Null paramètre, mais comment peut-il traiter Null différemment dans un cas et pas dans l'autre?

Mon seul suppose que c'est la mise en œuvre interne de Str() est en quelque sorte parviennent pas à obtenir la propriété par défaut, et le "non Valide utilisation de Null," erreur qui se passe pour une raison différente (autre chose que le paramètre est à l'origine de la "Invalid use of Null", peut-être, quand elle est de tenter de récupérer la propriété par défaut de la Field objet).

Quelqu'un a une technique plus détaillée explication de ce qui se passe réellement ici?

En bref:

?Str(rsSource!VehYear)

déclenche une "utilisation incorrecte de la valeur Null," erreur lors de la rsSource!VehYear est Null, mais

?Str(rsSource!VehYear.Value)

retourne Null.

Toutefois, les deux Trim(rsSource!VehYear) et Trim(rsSource!VehYear.Value) retour Null.

InformationsquelleAutor Mike Spross | 2010-05-06