2009-03-19 6 views
12

Tengo un campo opcional en una base de datos que estoy sacando usando un conjunto de registros DAO. Necesito comprobar si el campo está o no configurado antes de concatenarlo con otros campos. Hasta ahora tengo el siguiente fragmento de código que he probado con Is y = (esa es la sintaxis obviamente incorrecta [[Is | =]]) fue en vano. Parece que si uso = no se comparará correctamente con Null y si uso Is, entonces se queja de que no se está comparando con un objeto.¿Cómo se puede verificar nulo en un conjunto de registros VBA DAO?

Si hay una manera más simple de hacerlo, estoy totalmente abierto. prettyName toma 3 cadenas como parámetros e inicialmente solo estaba tratando de pasar rs.Fields ("MiddleName") directamente, pero vomitó en un valor nulo. Preferiría hacer algo más directo así, pero esto es lo mejor que se me ocurre.

Respuesta

27

¿Qué tal:

IsNull(rs.Fields("MiddleInitial").Value) 

También puede echar un vistazo a this article que tiene alguna explicación acerca de los valores nulos en aplicaciones de acceso VBA y cómo manejarlos.

7

Para el ejemplo que muestran, Nz funcionaría:

thisMiddleInitial = Nz(rs!MiddleInitial,"") 

O simplemente concatenando la cadena con una cadena vacía:

thisMiddleInitial = rs!MiddleInitial & "" 
2

Su pregunta ha sido respondida por Remou, me parece, pero se me ocurre que puede estar tratando de obtener la concatenación adecuada de los campos de nombre. En ese caso, podría usar Mid() y la propagación nula en VBA para obtener el resultado.

No consumo inicial del segundo campos separados, por lo que mi habitual fórmula concatenación nombre es:

Mid(("12" + LastName) & (", " + FirstName), 3) 

El "12" cadena al principio va a ser lanzado de inmediato si no es nulo Apellido e ignorado si es nulo, porque el operador de + concatenación propaga nulos.

Para extender esto para incluir intials medias se vería así:

Mid(("12" + LastName) & (", " + FirstName) & (" " + MiddleInitial), 3) 

Asumiendo que su UDF no está haciendo algún tipo de complicada limpieza de los apodos/abreviaturas/etc, esto podría reemplazar por completo, parece. yo.

+0

Truco inteligente, pero confiar en esta diferencia bastante oscura entre los operadores + y & es arriesgado, imo. Si alguien vuelve más tarde e intenta limpiar el código, puede decidir reemplazar todos los + con 's', o viceversa, por el bien de la coherencia, sin darse cuenta de que cambia el comportamiento. –

+0

Realmente no me preocupa demasiado la posibilidad de que alguien que no entiende los conceptos básicos de los operadores de concatenación de Jet SQL estropee las cosas. Podrían estropear fácilmente una UDF creada para el mismo propósito simplemente porque no entienden cómo funciona. –

+0

De acuerdo, saber cómo funcionan los operadores es algo bastante fundamental. – onedaywhen

0

If rst.Fields("MiddleInitial").Value = "Null" Then

Esto funciona para mí. Yo uso la base de datos MS SQL.

Cuestiones relacionadas