Acerca de:

Este blog contiene los códigos, ejemplos y bases de datos que he usado cuando aprendía acerca de algún tema específico. En lugar de borrarlos (una vez dominado ya el tema), he decidido publicarlos :)

viernes, 9 de mayo de 2014

¿Cuál es la diferencia entre “Null” y “Nothing” en VB6?

Esto lo pregunté en StackOverflow hace un tiempo. Acá pongo la traducción:

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

No hay comentarios: