Access - ¿puedo utilizar la función Nz para que en el caso de no encontrar valor sustituya "0" por "cerrado"

 
Vista:

¿puedo utilizar la función Nz para que en el caso de no encontrar valor sustituya "0" por "cerrado"

Publicado por vicente (23 intervenciones) el 24/06/2018 01:34:26
Hola. Nuevamente por aquí.
Voy resolviendo problemas pero van surgiendo nuevos.
Primeramente decir que tengo una tabla que se llama votar en la que se recoge si la votación está abierta o cerrada. Dependiendo de la misma (abierta/cerrada), se puede proponer libro, o votar a uno existente o si está cerrado el periodo entonces solamente se puede consultar el ranking de los libros votados (propuestos).

La tabla que recoge la situación (votar), se vacía cuando se acaba el periodo de votación, por lo que para un nuevo periodo ya no tiene registros, y ahí está el problema, como no tiene registros, la sentencia que pongo a continuación ya no sirve.

He puesto que el campo Sit_votac sea nulo en diferentes posiciones en el Open también en diferentes eventos pero en ninguno de ellos el resultado ha sido satisfactorio.

La formulación que hago y funciona si el campo Sit_votac toma los valores abierto/cerrado es la siguiente:
Private Sub Form_Open(Cancel As Integer)

Me.Sit_votac = DLookup("[N_Situación]", "Votar", "[IdPeriodo]=" & DMax("[IdPeriodo]", "Votar"))
N_Situación = Sit_votac

If Sit_votac = "CERRADO" Then
Me.Votar.Enabled = False

Else

Me.Votar.Enabled = True
End If

End Sub

Muchas gracias y un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

¿puedo utilizar la función Nz para que en el caso de no encontrar valor sustituya "0" por "cerrado"

Publicado por Anonimo (1956 intervenciones) el 25/06/2018 01:13:44
La función Nz devolverá aquello que se le indique en su 'valor alternativo' …. pero si se desea guardar ese valor, solo lo podrá hacer si el campo en la tabla es de un tipo compatible.

Quizás parte del código publicado se podría resumir, por ejemplo si en lugar de utilizar DLookup (que devuelve un valor o un NULL) y que solo se utiliza para confirmar la existencia de registros, se podría aplicar DCount que devolverá el numero de registros que cumplan las condiciones o un cero cuando no los encuentra (un cero es menos 'problemático' que un NULL y mas versátil).

Antes:
Me.Sit_votac = DLookup("[N_Situación]", "Votar", "[IdPeriodo]=" & DMax("[IdPeriodo]", "Votar"))

Alternativa:
Me.Sit_votac = DCount("*", "Votar", "[IdPeriodo]=" & DMax("[IdPeriodo]", "Votar"))

Disponiendo de ese valor (un cero = False, <> 0 = True) según las reglas de Access, se podría llegar a este punto:
Me.Votar.Enabled = DCount("*", "Votar", "[IdPeriodo]=" & DMax("[IdPeriodo]", "Votar"))

Que en una única línea de código, activa o desactiva al objeto 'votar' (que sospecho es lo que se pretende con todo el código publicado)

A mayores (si se desease mostrar un mensaje que indicase el estado de la votación) se podría lograr así:
Me.Sit_votac = IIF( DCount("*", "Votar", "[IdPeriodo]=" & DMax("[IdPeriodo]", "Votar")), "Abierta", "Cerrada")

Logrando hacer una simulación con solo dos líneas de código (y los recursos naturales de Access)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

¿puedo utilizar la función Nz para que en el caso de no encontrar valor sustituya "0" por "cerrado"

Publicado por vicente (23 intervenciones) el 29/06/2018 19:46:59
Muchas gracias anónimo.
Debe haber algo, probablemente en mi BBDD, que siguiendo tus instrucciones el resultado no es el esperado.

Tampoco sé si el motivo es en el evento que coloco la instrucción.

Seguiré indagando a ver si descubro dónde está/se produce el error.

En la instrucción siguiente y que me pasaste, supongo que tras el = será el condicional If ¿no?
Me.Sit_votac = IIF( DCount("*", "Votar", "[IdPeriodo]=" & DMax("[IdPeriodo]", "Votar")), "Abierta", "Cerrada")

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

¿puedo utilizar la función Nz para que en el caso de no encontrar valor sustituya "0" por "cerrado"

Publicado por Anonimo (1956 intervenciones) el 30/06/2018 00:24:48
En respuesta al interrogante: NO

La expresión es correcta IIF (que en castellano la traduce por Silnm) es una FUNCION
La mejor forma de conocerla (a ella y a todas aquellas de las que deseemos obtener un poco mas de información) consiste en seleccionarla y (con ella seleccionada) pulsar la tecla F1 que nos abrirá el mejor y mas fiel libro (electrónico) sobre Access.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

¿puedo utilizar la función Nz para que en el caso de no encontrar valor sustituya "0" por "cerrado"

Publicado por vicente (23 intervenciones) el 30/06/2018 12:48:41
En principio he solucionado el asunto interponiendo un nuevo formulario (que mira hacia la tabla votar) entre el comando votar y el formulario Ranking. Desconozco si eso es correcto o si acarreará problemas posteriores.

Gracias anónimo por tu tiempo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar