I have a recordset like this:
Dim rs as Recordset
Set rs as New Recordset
'... a lot of coding ...
if Err.Number <> 0 Then ' oops, something gone wrong!
If rs.State <> adStateClosed Then rs.Close
Set rs = Nothing
end if
' I want to evaluate if rs is Nothing, or Null
if rs is Nothing then
' this doesn't throw errors, and works well :D
end if
if rs is Null then
' this throws an error of "types not compatible"
end if
if rs = Null then
' this throws an error of "types not compatible"
end if
if isNull(rs) then
' never enters here, isNull(rs) evaluates to False
end if
I found out that in VB6 I rarely use "Null" (I used it for evaluating empty recordset schema names), but I use "Nothing" for stuff like images, adodb.connections or recordsets. For strings I have vbNullString. I read it is a pointer to a null string.
Is "Null" like a "unknown variable value" and "Nothing" a true null value?
Null is a specific subtype of a Variant. It has no existence outside of the Variant type, and is created to allow a Variant to model a database null value.
Nothing is a value of an Object variable. It essentially is identical to a null pointer, i.e. there is no object.
The following raises an error because "Is" can only be used with Object variables:
if rs is Null then
' this throws an error of "types not compatible"
end if
The following raises an error because an Object variable can never be Null:
if rs = Null then
' this throws an error of "types not compatible"
end if
The following evaluates False because IsNull() takes a Variant argument.
if isNull(rs) then
' never enters here, isNull(rs) evaluates to False
end if
It is equivalent to:
VarType(rs) = vbNull