Я стучу головой о стену на этом. Я смотрел на некоторых старых отчетов базы данных кода, написанного в VB6 и наткнулся на этой линии (код перемещения данных из базы данных «источник» в базу данных отчетов):«Недопустимое использование Null» при использовании Str() с полем Null Recordset, но Str (Null) отлично работает
rsTarget!VehYear = Trim(Str(rsSource!VehYear))
Когда rsSource!VehYear
является Null
, выше линии генерирует ошибку «Недопустимое использование Null» во время выполнения. Если я нарушу на строке выше и введите следующую команду в Immediate панели:
?rsSource!VehYear
Он выводит Null
. Хорошо, это имеет смысл. Далее я попытаюсь воспроизвести ошибку:
?Str(rsSource!VehYear)
Я получаю сообщение об ошибке «Недопустимое использование Null».
Однако, если я печатаю следующее в открывшееся окно:
?Str(Null)
Я не получаю сообщение об ошибке. Он просто выводит Null
.
Если я повторю тот же эксперимент с Trim()
вместо Str()
, все будет хорошо. ?Trim(rsSource!VehYear)
возвращение товара Null
, как и ?Trim(Null)
. Ошибок во время выполнения нет.
Итак, мой вопрос, как может Str(rsSource!VehYear)
возможно бросить «Недопустимое использование» ошибка при Str(Null)
не происходит, когда я знаю, что rsSource!VehYear
равно Null
?
Update: Если я печатаю следующее в открывшееся окно, он работает, как ожидалось (ошибка не происходит):
?Str(rsSource!VehYear.Value)
Это выводит Null
. Теперь я знаю, что rsSource!VehYear
фактически является экземпляром ADODB.Field
, но Value
является свойством по умолчанию, поэтому Str
должен работать на Value
(Null
). Даже сообщение об ошибке («Недопустимое использование Null») указывает, что Str
принимает параметр Null
, но как он может обрабатывать Null
по-разному в одном случае, а не в другом?
Мое единственное предположение - внутренняя реализация Str()
как-то не позволяет получить свойство по умолчанию, а ошибка «Недопустимое использование Null» происходит по другой причине (что-то иное, кроме параметра, вызывает «Недопустимое использование Null ", возможно, когда он пытается получить свойство по умолчанию из объекта Field
).
У кого-нибудь есть более подробное техническое объяснение того, что на самом деле происходит здесь?
Короче:
?Str(rsSource!VehYear)
бросает "Недопустимое использование" ошибка при rsSource!VehYear
является Null
, но
?Str(rsSource!VehYear.Value)
возвращается Null
.
Однако, оба Trim(rsSource!VehYear)
и Trim(rsSource!VehYear.Value)
возвращение Null
.
Это проясняет ситуацию. Кстати, спасибо за SimplyVBUnit;) –