Cómo manejar los valores nulos en Access: 10 consejos útiles

Los valores null pueden ser un problema común en las bases de datos de Access. Si no se manejan adecuadamente, pueden generar errores en los datos y dificultar el desarrollo de aplicaciones. En este artículo, aprenderemos cómo entender y administrar los valores null en Access.

Índice de Contenido
  1. #1: Conocer los valores null
  2. #2: Tratar los valores null
  3. #3: No comparar null
  4. #4: Encontrar o excluir valores null
  5. #5: Trabajar con los valores null
  6. #6: Encontrar valores null usando ADO
  7. #7: Entender la inconsistencia de los agregados en SQL
  8. #8: Incluir valores null en una búsqueda condicional
  9. #9: Excluir valores null en un grupo
  10. #10: Usar null para detectar problemas de normalización

#1: Conocer los valores null

Antes de poder manejar los valores null, es importante comprender su naturaleza. A diferencia de lo que se piensa comúnmente, un valor null no es simplemente un campo vacío o sin valor. En realidad, indica que los datos están ausentes o desconocidos. A veces, un valor null puede significar que los datos no existen o no son válidos para un registro en particular, pero los conceptos no son intercambiables.

#2: Tratar los valores null

En Access, se permite el uso de valores null, pero es responsabilidad del desarrollador determinar si se deben almacenar. En general, los datos deben ser la guía para tomar esta decisión. Si la naturaleza de los datos requiere que todos los datos estén presentes para guardar el registro, se puede manejar los valores null a nivel de tabla. Simplemente establezca la propiedad "Requerido" del campo en "Sí" y evite el problema. Sin embargo, debe estar preparado para realizar cambios en las reglas a medida que avanza en el desarrollo.

En muchas aplicaciones, los valores null están presentes y los usuarios requieren la flexibilidad de crear registros sin ingresar todos los datos al momento de su creación. En este caso, tiene dos opciones: permitir que la tabla almacene un valor null o usar una expresión predeterminada que almacene un mensaje de texto adecuado, como "NA" o "Pendiente". Sin embargo, esta solución solo funciona para campos de texto. Para campos numéricos, se podría usar un valor predeterminado de 0, pero esto podría causar problemas a largo plazo debido a que las funciones manejan los valores null y 0 de manera diferente. Además, la propiedad "Predeterminado" solo funciona para nuevos registros y no se puede aplicar a registros existentes. En general, es más fácil manejar los valores null que intentar evitarlos de esta manera.

#3: No comparar null

No intente encontrar valores null comparándolos con cualquier otra cosa. Las siguientes expresiones generarán un error, independientemente del valor de cualquier otra cosa:

anything = Null
anything <> Null

Según Access, null no equivale a nada. No se puede usar el operador de igualdad (=) para encontrar valores null ni el operador de desigualdad (<>) para excluirlos (esto no siempre es cierto fuera de Access).

Cómo instalar y configurar Sybase Adaptive Server Enterprise (ASE) en Linux

#4: Encontrar o excluir valores null

Una vez que decida que los valores null son aceptables, es su responsabilidad acomodarlos en toda la aplicación. Para encontrar o excluir valores null, use las cláusulas "Es Null" y "No Es Null", respectivamente, en expresiones de criterio y cláusulas WHERE de SQL. Por ejemplo, para encontrar valores null en una consulta, ingrese "Es Null" en la celda de Criterios del campo correspondiente. Al construir una cláusula WHERE, use "Es Null" y "No Es Null" de la siguiente manera:

WHERE source.field Es Null
WHERE NOT(source.field) Es Null

Proteja las expresiones de VBA de errores mediante el uso de las funciones IsNull() y Not IsNull(). Por ejemplo, el uso de IsNull() en la siguiente instrucción If maneja un posible error en tiempo de ejecución cuando existen valores null:

If Not IsNull(field) Then ...

Aunque Is Null e IsNull() tienen funciones similares, no son intercambiables.

#5: Trabajar con los valores null

Access no siempre manejará los valores null como usted espera. Si los permite, esté preparado para sorpresas. Por ejemplo, una expresión simple como:

ResultadoTotal = Subtotal + Envío

puede convertirse en un problema si Envío contiene valores null. En lugar de devolver solo el Subtotal, como podría esperar, la expresión devuelve null. Esto se debe a que cualquier ecuación que encuentre un valor null siempre devolverá null. Aunque puede ser un inconveniente, tiene sentido, ya que no se puede evaluar un valor desconocido.

Si sus datos contienen valores null, use la función Nz() para proteger sus expresiones de este error. En específico, Nz() devuelve un valor distinto de null cuando encuentra un valor null, de la siguiente manera:

Qué es sudo y por qué deberías usarlo
ResultadoTotal = Subtotal + Nz(Envío)

En este caso, Nz() devuelve 0 cuando Envío es null. Use Nz() en criterios y expresiones VBA. Los proyectos de Access no admiten Nz(). En su lugar, use la función IsNull de Transact SQL.

#6: Encontrar valores null usando ADO

En el punto #3, aprendimos que null no equivale a nada. Esto es cierto si se usan funciones nativas y VBA, pero no si se manipulan datos a través de la biblioteca ActiveX Data Object (ADO). Por ejemplo, la siguiente instrucción ejecutada en un objeto Recordset de ADO devuelve un error:

rst.Find "NúmeroDeFax Is Null"

Esto se debe a que ADO no reconoce el operador Is en este contexto. La biblioteca ADO admite los operadores Equals e Inequality al buscar o excluir valores null. Afortunadamente, la corrección es tan simple como reemplazar el operador Is por el operador Equals:

rst.Find "NúmeroDeFax = Null"

Para excluir valores null usando ADO, use el operador Inequality:

rst.Find "NúmeroDeFax <> Null"

Access es un poco peculiar en este tema. Muchas bibliotecas usan los operadores Equals e Inequality en lugar de Is. Si una biblioteca no nativa devuelve un error al trabajar con valores null, este cambio probablemente resolverá el problema.

#7: Entender la inconsistencia de los agregados en SQL

No todas las funciones de agregado consideran los valores null. La buena noticia es que hay algo de lógica en esta inconsistencia. Una función de agregado que evalúa un campo no evalúa los valores null en su resultado. Sin embargo, las funciones Count(), First() y Last() sí evalúan los valores null. Esto tiene sentido, ya que el hecho de que un campo contenga un valor null no niega el propósito de la fila dentro del contexto del dominio. Por ejemplo, Count(*) cuenta el número total de filas en un conjunto de registros, incluso si algunas de esas filas contienen valores null. Si desea excluir valores null en un recuento, especifique el campo en la forma Count(campo). El resultado de ambas formas puede ser o no el mismo. Lo importante es que la forma específica del campo no considerará los valores null en su recuento.

Cómo eliminar registros duplicados en una base de datos de Access

#8: Incluir valores null en una búsqueda condicional

Cuando usa una cláusula WHERE para encontrar o restringir datos, debe especificar explícitamente los valores null. De lo contrario, Jet excluye la fila de los resultados. Este comportamiento es inherente al problema de igualdad discutido en el punto #3. Debido a que null no equivale a nada, no puede cumplir con una condición que no sea Is Null. Por ejemplo, la expresión simple:

WHERE campo < 5

devolverá todos los registros en los que el campo sea menor que 5, excepto aquellos registros donde el campo sea null. Esto puede ser lo que desea, o puede que no. Si desea incluir valores null, incluya Is Null en la condición de la siguiente manera:

WHERE campo < 5 OR campo Is Null

#9: Excluir valores null en un grupo

La cláusula GROUP BY de Jet SQL no elimina los valores null de los resultados agrupados. En su lugar, Jet ordena los valores null en la parte superior o inferior del conjunto de resultados, según el orden de clasificación. Por ejemplo, la siguiente consulta incluye registros donde el campo Región es null:

SELECT Nombre, Apellido, Región
FROM Empleados
GROUP BY Región

El resultado no es incorrecto, simplemente puede que no sea lo que desea. Debe excluir explícitamente los valores null. En este caso, agregaría una cláusula HAVING de la siguiente manera:

SELECT Nombre, Apellido, Región
FROM Empleados
GROUP BY Región
HAVING Not(Región) Is Null

No hay un método específico para excluir explícitamente los valores null. La solución dependerá del propósito de la instrucción.

#10: Usar null para detectar problemas de normalización

Un valor null es un valor aceptable. Sin embargo, demasiados valores null a menudo indican una tabla no normalizada. Por ejemplo, si almacena los números de teléfono de los clientes, es posible que termine con muchos campos de número de fax vacíos (incluso si no tiene valores null, su tabla no está correctamente normalizada en este caso).

Ventajas de las claves sustitutas en bases de datos relacionales

Para normalizar los datos de los teléfonos, agregaría una tabla que incluya tres campos: la clave foránea que relaciona el registro del teléfono con el cliente correspondiente, el tipo de número de teléfono y el número de teléfono en sí. El tipo de número de teléfono identificaría el número de teléfono como una oficina, fax, hogar, celular, etc. Luego, ingresaría registros de números de teléfono solo cuando sea apropiado, eliminando los valores null. Si el cliente no tiene un fax, no habrá un registro para un número de fax.

En Newsmatic nos especializamos en tecnología de vanguardia, contamos con los artículos mas novedosos sobre Gestión de datos, allí encontraras muchos artículos similares a Cómo manejar los valores nulos en Access: 10 consejos útiles , tenemos lo ultimo en tecnología 2023.

Artículos Relacionados

Subir

Utilizamos cookies para mejorar su experiencia de navegación, mostrarle anuncios o contenidos personalizados y analizar nuestro tráfico. Al hacer clic en “Aceptar todo” usted da su consentimiento a nuestro uso de las cookies.