Tengo un recordset como el siguiente:
Dim rs as Recordset Set rs as New Recordset '... a lot of coding ... if Err.Number <> 0 Then ' oops, algo salió mal If rs.State <> adStateClosed Then rs.Close Set rs = Nothing end if ' quiero evaluar si rs es Nothing o Null if rs is Nothing then ' esto no tira errores y funciona bien :D end if if rs is Null then ' esto tira un error de "tipos no compatibles" end if if rs = Null then
' esto tira un error de "tipos no compatibles"
end if if isNull(rs) then ' nunca entra aquí, isNull(rs) evalua a Falso end if
La respuesta que me dio Mark Bertenshaw es:
"Null" es un subtipo específico de Variant. No existe fuera de Variant, y se creó para permitir modelar un dato de tipo nulo en una base de datos.
"Nothing" es un valor de tipo Object. Identifica un puntero nulo, es decir: no hay objeto.
Al evaluar un recordset con el operador "is" tira un error porque sólo se puede usar con datos de tipo Object.
IsNull(rs) retorna falso porque evalúa variables del tipo Variant.
IsNull(rs) equivale a VarType(rs) = VBNull