Ich hämmere meinen Kopf gegen die Wand auf diesem. Ich war in einem alten Datenbank Reporting Code suche in VB6 geschrieben und kam in dieser Zeile (die Codedaten von einer „Quelle“ Datenbank in eine Berichtsdatenbank bewegen):"Ungültige Verwendung von Null" bei Verwendung von Str() mit einem Null Recordset-Feld, aber Str (Null) funktioniert gut
rsTarget!VehYear = Trim(Str(rsSource!VehYear))
Wenn rsSource!VehYear
Null
ist, die über die Linie generiert einen Laufzeitfehler "ungültige Verwendung von Null". Wenn ich auf der oberen Zeile brechen und die folgenden in dem Direkt-Bereich ein:
?rsSource!VehYear
Es gibt Null
. Gut, das macht Sinn. Als nächstes versuche ich, den Fehler zu reproduzieren:
?Str(rsSource!VehYear)
Ich bekomme einen Fehler "ungültige Verwendung von Null".
Allerdings, wenn ich die folgenden in das Direktfenster ein:
?Str(Null)
ich keinen Fehler. Es gibt einfach Null
aus. Wenn ich das gleiche Experiment mit Trim()
anstelle von Str()
wiederhole, funktioniert alles gut. gibt Null
zurück, ebenso wie ?Trim(Null)
. Keine Laufzeitfehler.
Also, meine Frage ist, wie kann Str(rsSource!VehYear)
möglicherweise eine „Ungültige Verwendung von Null“ Fehler aus, wenn Str(Null)
nicht, wenn ich weiß, dass rsSource!VehYear
-Null
gleich ist?
Update: Wenn ich folgendes in das Direktfenster ein, es wie erwartet funktioniert (kein Fehler auftritt):
?Str(rsSource!VehYear.Value)
Diese gibt Null
. Jetzt weiß ich, dass rsSource!VehYear
ist eigentlich eine ADODB.Field
Instanz, aber Value
ist seine Standardeigenschaft, so Str
sollte auf der Value
-Eigenschaft (die Null
ist) betrieben werden. Selbst die Fehlermeldung ("Ungültige Verwendung von Null") deutet darauf hin, dass Str
einen Null
Parameter empfängt, aber wie kann es Null
unterschiedlich in einem Fall und nicht anders behandeln?
Meine einzige Vermutung ist die interne Implementierung von Str()
ist irgendwie fehlgeschlagen, um die Standardeigenschaft zu erhalten, und der Fehler "ungültige Verwendung von Null" passiert aus einem anderen Grund (etwas anderes als der Parameter verursacht die "ungültige Verwendung von Null ", möglicherweise, wenn es versucht, die Standardeigenschaft vom Objekt Field
abzurufen.
Hat jemand eine detailliertere, technische Erklärung dafür, was hier eigentlich passiert?
Kurz:
?Str(rsSource!VehYear)
eine "Ungültige Verwendung von Null" Fehler auslöst, wenn rsSource!VehYear
Null
, aber
?Str(rsSource!VehYear.Value)
kehrt Null
.
Jedoch Trim(rsSource!VehYear)
und Trim(rsSource!VehYear.Value)
zurück Null
.
Das klärt die Dinge auf. Übrigens danke für SimplyVBUnit;) –