No me funciona Nz en una Consulta de Access

Tengo una consulta 1 con varias tablas incorporadas, algunas de ellas son a su vez consultas. Quiero de una de ellas obtener la suma de los importes para un mes en especifico, y yo se que para el mes que voy a especificar ella contiene un valor null, o sea, no tiene registros con esa fecha. En la Consulta 1 pongo el valor Nz([Importe_Consulta2],0) y no me esta devolviendo cero porque la consulta 1 al ejecutarla no muestra ningun valor.

4 Respuestas

Respuesta

I. Hola Dinorah, aunque por mi parte no soy conocedor y no puedo responderle, leí a cerca de la función "IsNull", equivalente a Nz pero más completa tengo entendido y con una forma de funcionar distinta, no sé si ya la utilizó o si pudiese serle funcional pero quisiera proponérsela.

https://help.qlik.com/es-ES/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/NULLFunctions/IsNull.htm 

https://www.ionos.es/digitalguide/servidores/configuracion/sql-isnull/ 


Quisiera trasladarle la información en Inglés/español que vi sobre esta incidencia con la esperanza de que pudiese serle de alguna utilidad mientras le atiende un experto en Access de primera mano.

Disculpe por las molestias de tanta lectura y la manera de responderle. Ánimo.


https://www.reddit.com/r/MSAccess/comments/1gl68ti/access_query_formula_with_null_values/?tl=es-419 

https://stackoverflow.com/questions/7635673/ms-access-nz-function-with-empty-table 

https://nolongerset-com.translate.goog/null-in-ms-access/?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc 

https://ss64-com.translate.goog/access/nz.html?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc 

https://bettersolutions-com.translate.goog/vba/sql/null-values.htm?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc 

https://microsoft.public.es.access.narkive.com/36yhIU3M/error-en-consulta-si-valor-fecha-es-nula 

https://www.access-programmers.co.uk/forums/threads/simple-way-to-give-all-null-values-0-in-calculated-fields.248477/ 

https://allenbrowne-com.translate.goog/casu-12.html?_x_tr_sch=http&_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc 

https://www.vbforums.com/showthread.php?792319-RESOLVED-ACCESS-IsNull()-function-in-Access 

https://www.lawebdelprogramador.com/foros/Access/1806351-Access-Consulta-con-resultado-Nulo-no-logro-que-refleje-un-cero-en-su-lugar.html 

https://www.lawebdelprogramador.com/foros/Access/2139020-Consultas-con-campos-vacios-null-y-rellenos.html 

https://www.reddit.com/r/vba/comments/10z6d7g/msaccess_did_an_update_change_how_nulls_work_in/ 

http://www.mvp-access.com/foro/consultas-con-campos-vacios-nulos-y-rellenos_topic86367.html 

https://wheatblog-com.translate.goog/2008/05/the-mysterious-nz-function-in-microsoft-access/?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc 

¿Como inserto una fecha null?

https://nolongerset-com.translate.goog/null-handling-in-ms-access/?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc 

https://docs-python-org.translate.goog/3/library/functions.html?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc 

https://www.reddit.com/r/MSAccess/comments/so5216/nz_failure_to_compile/?tl=es-es 

http://www.mvp-access.com/foro/error-en-suma-de-datos-en-pie-de-formulario_topic85547.html 

https://www.accessdemo.info/docs_articulos/valores-nulos.html 

https://www.youtube.com/watch?v=z_nWpCaNBec 

https://www.forosdelweb.com/f15/problemas-sumar-con-valores-null-512858/ 

https://nubededatos.blogspot.com/2013/09/incompatibilidad-de-excel-con-consulta.html 

https://groups.google.com/g/microsoft.public.es.access/c/5p_qAjXHa04?pli=1 

Respuesta
2

Muchas gracias por su amable respuesta

Respuesta
2

Para solucionar este problema en Microsoft Access, el uso de IsNull no es suficiente por sí solo cuando se trata de una unión (JOIN) entre tablas o consultas, porque si no hay un registro que coincida en la Consulta1, el motor de base de datos no tiene un campo para evaluar; simplemente no hay fila que mostrar.

Para corregir esto, debes seguir dos pasos clave: Cambiar el tipo de combinación (Join) y usar la función Nz (que es la versión de Access para manejar valores nulos).

1. Cambiar el Tipo de Combinación (JOIN)
Si estás haciendo una unión interna (Inner Join), Access descarta las filas de la Tabla 109 si no encuentra correspondencia en la Consulta1.

Abre la Consulta2 en Vista Diseño.

Haz doble clic en la línea que une la Tabla 109 con la Consulta1.

Selecciona la opción que dice: "Incluir todos los registros de 'Tabla 109' y solo aquellos registros de 'Consulta1' donde los campos combinados sean iguales" (esto creará un Left Join).

Haz clic en Aceptar.

Esto obligará a la consulta a mostrar todos los registros de la Tabla 109, incluso si no hay datos correspondientes en la Consulta1.

2. Aplicar la función Nz
Ahora que el registro aparece (aunque el valor sea nulo porque no hay coincidencia), debes convertir ese nulo en un cero.

En la cuadrícula de diseño de la Consulta2, en la celda donde tienes el campo que proviene de la Consulta1, reemplázalo por esta expresión:

SumaImporteCero: Nz([NombreDelCampoDeLaConsulta1]; 0)

Resumen de la lógica

El Left Join: Garantiza que los datos de la Tabla 109 (donde sí hay registros de Enero) siempre se muestren.

La función Nz: Se encarga de transformar el valor Null que trae la Consulta1 (al no encontrar coincidencias para Enero) en un valor 0 legible para tus cálculos posteriores.

Con estos dos cambios, tu Consulta2 debería mostrar correctamente el valor de la Tabla 109 y un 0 donde la Consulta1 no tenga información.

Te dejo una aproximación ajusta el nombre de tus campos

SELECT 
    t1.campo_fecha,
    t1.suma_credito,
    Nz(c1.suma_importes, 0) AS suma_importes_cero
FROM [109] AS t1
LEFT JOIN [Consulta1] AS c1 ON Month(t1.fecha) = c1.mes_campo
WHERE Month(t1.fecha) = 1;
Respuesta

Lo más probable es que para NZ no sea el entorno apropiado, en su lugar podrías utilizar una función de dominio que detectase la existencia del objeto, de entre ellas la más básica: IsError, otra alternativa podría ser: IsNull, pero creo que la adecuada (se espera un valor numérico) es la función IsNumeric.

Para sustituir a NZ (que pude devolver un valor que no sea SI/NO) hay que añadir otra función que evalúe el dato devuelto por la función de dominio y permita una alternativa (traduzca el Si/No), la función IIF.

Actual: Nz([Importe_Consulta2],0)

Alternativa: IIF(IsNull([Importe_Consulta2]),0)

Una corrección (la función a aplicar y bien aplicada):

Alternativa: IIF(IsNumeric([Importe_Consulta2]),[Importe_Consulta2],0)

Si se espera un valor numérico y no lo encuentra devuelve el valor alternativo.

Muchas gracias por su respuesta,  pero no he resuelto el problema aun. Le explico mejor. Supongamos que tenemos una Tabla llamada 109 que entre sus campos tiene fecha e importe, y una consulta llamada  Consulta1 de otra Tabla la 520 que me devuelve la suma de los importes para un mes determinado. Esta ultima tabla no tiene importes con fecha de Enero.

Cuando yo hago otra consulta, llamémosle Consulta2,  donde pongo la Tabla 109 con los campos Suma de Crédito y Expr: Mes[Fecha] y añado la Consulta1, y ejecuto la consulta2 para el mes de Enero, como la Consulta1 no tiene registros para ese mes, me devuelve un campo vacío y la consulta2 no muestra ningún valor. Al campo SumadeImportes es al que debo aplicar el IsNull, para que me devuelva cero y se pueda ejecutar la Consulta2 con cero en el Campo SumadeImportes. 

No se si he enredado un poco la explicación. Si es así me dice para aclarar lo que necesite. Quedo agradecida de sus soluciones

A modo de experimento, intentemos otro camino que es mas simple, en el ejemplo he reutilizado la expresión que se publico en el primer mensaje del hilo:
Original: -->> Nz([Importe_Consulta2],0)

Alternativa: -->> Val([Importe_Consulta2])

Hay diferencias entre versiones de Access y en el caso de que no funcione me seria de gran utilidad conocer el entorno en el que se esta utilizando la expresión para emularlo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas