Подтвердить что ты не робот

Ошибка проверки 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, либо передаю строку.

4b9b3361

Ответ 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