¿Cómo se puede comprobar si hay valores nulos en un conjunto de registros VBA DAO?
-
21-08-2019 - |
Pregunta
Tengo un campo opcional en una base de datos que estoy extrayendo usando un conjunto de registros DAO.Necesito verificar si el campo está configurado o no antes de concatenarlo con otros campos.Hasta ahora tengo el siguiente fragmento de código que probé con ambos Is
y =
(esa es la sintaxis obviamente incorrecta [[Is | =]]
) en vano.Parece que si uso =
no se comparará correctamente con Null
y si uso Is
luego se queja de que no se compara con un Objeto.
While Not rs.EOF
If rs.Fields("MiddleInitial") [[Is | =]] Null Then thisMiddleInitial = "" Else thisMiddleInitial = rs.Fields("MiddleInitial")
If prettyName(myLastName, myFirstName, myMiddleInitial) = prettyName(rs.Fields("LastName"), rs.Fields("FirstName"), thisMiddleInitial) Then
MsgBox "Yay!"
End If
rs.MoveNext
Wend
Si hay una forma más sencilla de hacer esto, estoy totalmente abierto a ella.PrettyName toma 3 cadenas como parámetros e inicialmente solo estaba tratando de pasar rs.Fields("MiddleName") directamente pero arrojaba un valor nulo.Preferiría hacer algo más directo como eso, pero esto es lo mejor que se me ocurrió.
Solución
¿Qué tal:
IsNull(rs.Fields("MiddleInitial").Value)
También puede echar un vistazo a este artículo que tiene alguna explicación sobre los valores nulos en las aplicaciones de Access VBA y cómo manejarlos.
Otros consejos
Para el ejemplo que muestra, Nz funcionaría:
thisMiddleInitial = Nz(rs!MiddleInitial,"")
O simplemente concatenando la cadena con una cadena vacía:
thisMiddleInitial = rs!MiddleInitial & ""
Tu pregunta ha sido respondida por Remou, me parece, pero se me ocurre que puedes estar tratando de obtener la concatenación adecuada de los campos de nombre. En ese caso, podría usar la propagación Mid () y Null en VBA para obtener el resultado.
No utilizo campos iniciales separados, por lo que mi fórmula habitual de concatenación de nombres es:
Mid(("12" + LastName) & (", " + FirstName), 3)
El " 12 " la cadena al principio se descartará si LastName no es nulo y se ignorará si es nulo, porque el operador de concatenación + propaga nulos.
Extender esto para incluir los inicios medios se vería así:
Mid(("12" + LastName) & (", " + FirstName) & (" " + MiddleInitial), 3)
Asumiendo que su UDF no está haciendo algún tipo de limpieza complicada de apodos / abreviaturas / etc., esto podría reemplazarlo por completo, me parece.
If rst.Fields("MiddleInitial").Value = "Null" Then
Esto funciona para mí. Yo uso MS SQL Database.
Creo que la opción NoMatch podría funcionar en esta situación:
If rs.NoMatch = True Then
Prefiero usar lo siguiente para tener en cuenta los valores de cadena nulos y vacíos. Es una buena comprobación usar formularios que recopilan valores de los usuarios.
If Trim(rs.Fields("MiddleInitial") & "") = "" then