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ó.

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top