En access 2016 coloco la función Nz y dice que no se puede usar en una columna calculada

En access 2016 tengo una sola tabla simple, en un campo calculado coloco Nz([Precio 1];0) y me dice que no se puede usar en una columna calculada. [Precio 1] es un simple campo numérico. No entiendo que pasa. Si pueden ayudarme se los agradecería mucho.

Respuesta

Puede deberse a un planteamiento incorrecto o a que no dispone de datos adecuados para evaluar.

Lo mas probable es que se este intentando evaluar un campo (dato) que aun no se calculo por depender de resultados que se obtienen en cálculos que se efectúan en tiempo de ejecución, casi siempre se resuelve evaluado el calculo y no su resultado.

Un ejemplo clásico (si me lo permite el foro) :

Error ==> .... A x B As saldo,  Nz (Saldo, 0) ......

Asumible ==>>  .... A x B As saldo,  Nz (A x B , 0) ......

Es un simple ejemplo de planteamiento, no un calculo real con datos en una aplicación, solo analizando la expresión real que genera el error se puede dar la solución adecuada.

Gracias por tu respuesta, pero pensando en lo que dices, cree una nueva tabla super sencilla, solo con 3 campos: Precio 1, Precio 2, Total.

Precio 1:     Numerico

Precio 2:    Numerico

Total: Calculado, Expresión: Nz([Precio 1];0)+Nz([Precio 2];0)

Y me dice textualmente: La expresión Nz([Precio 1], 0)+Nz([Precio 2], 0) no se puede usar en una columna calculada.

Lo extraño es que en mi expresión debo colocar ";" pero en el mensaje pone "," si yo pongo "," me da error de sintaxis.

¿Será ese el problema? ¿Debo cambiar la configuración regional?

He estado intentando de cambiar ";" por ","  y no consigo por donde

Ya logré cambiar la ";" por "," en la configuración de Windows 10, ahora me acepta la expresión con "," pero igual me dice que no se puede usar en una columna calculada

Una nota sobre tus apreciaciones:

Access (internamente) trabaja en formato americano y para poder adaptarse a cualquier idioma tiene una capa intermedia mas entre la maquina y el usuario (la configuración regional).

Sin complicarlo mucho: esta capa es un traductor que se encarga de traducir la coma (separador de listas en origen) por el punto y coma (en version castellana) y ello porque en castellano la coma se utiliza como separador decimal.

Eso mismo ocurre con el punto (separador decimal en origen) que tiene que 'traducirlo por coma simple en castellano.

En el generador grafico de Access (donde parece estar creada esa SQL o consulta) se utiliza el castellano y en su respuesta (que utiliza el análisis de la expresión) la devuelve con la coma y si interviniese un decimal es muy probable que lo mostrase con el punto.

El intercambio de punto y coma por coma no es un error (es una respuesta interna NO traducida al idioma local) por ello aunque se modifique ese parámetro en la configuración regional no funcionara la expresión porque conceptualmente (ya sea con coma o punto y coma) es incorrecta.

Devuelve a su origen esos cambios, pues son conceptos que afectan a toda la interfaz y tendrás problemas con Excel u Word así como otros programas de diferentes orígenes que esperan del castellano un punto y coma como separador de listas y una coma como separador decimal.

El concepto a entender es que si el proyecto requiere calcular cuantas manzanas entran en un determinado numero de bolsas, en ese mismo punto del proyecto no se puede calcular en bolsas (ha de utilizarse el mismo calculo para que devuelve el numero de manzanas/bolsa)

Eso no impide que en una consulta basada en la anterior (que ya devuelve 'bolsas' ) se pueda utilizar 'bolsa' como un concepto definido y no abstracto como en la anterior consulta.

Ok, pero aún no he logrado que me funcione la función Nz.

NZ es una función que puede detectar si la existencia de un dato en un campo (campo que tiene que existir formalmente) tiene asignado un valor o aun no ha sido inicializado (por lo que será un Empty ==>> NULL).

Si no 'existe' el campo [Edad] porque se genera en una consulta, no se podrá verificar (con NZ en esa misma consulta) si tiene asignado un dato o no.

La referencia a un campo que no aun no existe (puede existir al finalizar la consulta que lo genera pero no antes) generara un error en tiempo de ejecución y solo se podría tratar con una función de error (sea esta genérica o especifica).

Para verificar que en Edad 'habrá' un dato se ha de verificar su origen o como alternativa si el calculo delata un NZ.

Lo clásico es verificar si se dispone de la fecha de nacimiento para compararla con la fecha actual u otra cualquiera, con NZ(el - cálculo, xx.) devolvería XX en lugar de un NULL

1 respuesta más de otro experto

Respuesta

Pruebe con esto

IIf(IsNull([Precio 1]), 0, [Precio 1])

Gracias por su respuesta, lo probé y me dice exactamente lo mismo, pero en la expresión yo debo colocar ";" y en lo el me arroja pone "," tal vez ese sea el problema, voy a tratar de cambiar la configuración.

He estado intentando cambiar para poner "," en vez de ";"  pero no consigo por donde

Si no tiene información confidencial puede comprimir su base de datos en RAR y enviarla a [email protected] y trato de colaborarle ya que no es posible subir imágenes y código

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas