Ошибка проверки NULL в VBScript
У меня есть следующий VBScript на странице классического ASP:
function getMagicLink(fromWhere, provider)
dim url
url = "magic.asp?fromwhere=" & fromWhere
If Not provider is Nothing Then ' Error occurs here
url = url & "&provider=" & provider
End if
getMagicLink = "<a target='_blank' href='" & url & "'>" & number & "</a>"
end function
Я продолжаю получать сообщение об ошибке "Object Required" в строке, которая говорит If Not provider Is Nothing Then
.
Либо значение равно NULL, либо не NULL, так почему я получаю эту ошибку?
Изменить: Когда я вызываю объект, я передаю либо NULL, либо передаю строку.
Ответы
Ответ 1
Из вашего кода это выглядит как provider
- это вариант или какая-то другая переменная, а не объект.
Is Nothing
предназначен только для объектов, но позже вы говорите это значение, которое должно быть либо NULL, либо NOT NULL, которое будет обрабатываться IsNull
.
Попробуйте использовать:
If Not IsNull(provider) Then
url = url & "&provider=" & provider
End if
В противном случае, если это не работает, попробуйте:
If provider <> "" Then
url = url & "&provider=" & provider
End if
Ответ 2
Я вижу много путаницы в комментариях. Null
, IsNull()
и vbNull
в основном используются для обработки базы данных и обычно не используются в VBScript. Если это не указано явно в документации вызывающего объекта/данных, не используйте его.
Чтобы проверить, не переменна ли переменная, используйте IsEmpty()
. Чтобы проверить, не переменна ли переменная или содержит ""
, проверьте на ""
или Empty
. Чтобы проверить, является ли переменная объектом, используйте IsObject
и чтобы убедиться, что этот объект не имеет контрольного теста на Is Nothing
.
В вашем случае вы сначала хотите проверить, является ли переменная объектом, а затем посмотреть, является ли эта переменная Nothing
, потому что, если она не является объектом, вы получаете ошибку "Обязательный объект" при тестировании на Nothing
.
фрагмент для смешивания и соответствия в коде:
If IsObject(provider) Then
If Not provider Is Nothing Then
' Code to handle a NOT empty object / valid reference
Else
' Code to handle an empty object / null reference
End If
Else
If IsEmpty(provider) Then
' Code to handle a not initialized variable or a variable explicitly set to empty
ElseIf provider = "" Then
' Code to handle an empty variable (but initialized and set to "")
Else
' Code to handle handle a filled variable
End If
End If
Ответ 3
Я просто добавлю пробел ("") в конец переменной и сделаю сравнение. Что-то вроде ниже должно работать, даже если эта переменная равна нулю. Вы также можете обрезать переменную только в случае пробелов.
If provider & "" <> "" Then
url = url & "&provider=" & provider
End if