Matización función Silnm de Access y lo mismo por código

Decir que casi nunca usé el generador de expresiones. Pero por lo que veo no sirve que pongas la expresión escrita en un cuadro de texto de un informe directamente, sino que tienes que hacerlo desde el generador de expresiones para generar la función correcta sino da error pese a escribirla correctamente (Por ej: Silnm) ¿Es así o es un fallo de mi Access?.

=SiInm([nota]>=5;"APROBADO";SiInm([NOTA]<5;"SUSPENSO";""))

Por otra parte, quería obtener el mismo resultado desde un cuadro de texto en el evento al abrir el formulario pero me da error ¿Qué horror cometo? Me da error 2427 en tiempo de ejecución. Que la expresión no tiene valor. Gracias anticipadas.

Private Sub Report_Open(Cancel As Integer)
If Me.Nota >= 5 Then
Me.observacion = "Aprobado"
Else
Me.observacion = "Suspenso"
End If
End Sub

1 respuesta

Respuesta
1

Yo nunca tuve problema al escribir una expresión directamente en un cuadro de lista (siempre que la sintaxis que escriba sea la correcta, obviamente...). Lo que tienes que tener en cuenta es la versión de tu Access y la de tu configuración regional. Por ejemplo, si tu Access está en inglés, no puedes usar SiInm, deberás usar IIf. Lo mismo ocurre con los separadores (usarás la coma (,) o el punto y coma (;) según la región/versión)

Un truco que no suele fallar es usar los nombres de las funciones en inglés, y si tu Access está en español, ya se encarga él de "traducirlo"...

En cuanto al código que pones, el "horror" que comentes es que si lo quieres hacer en el evento "al abrir" de un formulario, el código tienes que programarlo en ese evento de un formulario, no en uno de un informe como haces (Sub Report_Open)...

Como imagino que lo querrás hacer en un informe, debes tener en cuenta dos cosas para no tener ese problema:

1º/ Seleccionar el evento más adecuado (en general el evento "al abrir" no es el más adecuado)

2º/ El orden en que se ejecutan los eventos: https://support.office.com/es-es/article/orden-de-eventos-para-objetos-de-base-de-datos-e76fbbfe-6180-4a52-8787-ce86553682f9

La expresión está tal cual la puse en la pregunta, si lo escribo directamente da el error, si lo escribo desde el generador de código usando la función funciona, pero si lo pongo manual desde el propio generador no funciona (sólo es poner Slinm y da el error).

Respecto a lo segundo miré el orden de eventos pero no lo veo claro. Yo lo que quería era en el informe ¿como tendría que hacer?

1º/ ¿Y si lo pones en inglés (IIf) también te da error? Todo parece que el problema está en tu Access, porque la expresión es correcta y tendría que aceptarla (salvo que tu access esté en otro idioma, que no debe ser el caso)

2º/ El evento, en mi opinión, más adecuado, sería "al dar formato" de la sección donde tengas esos controles (probablemente Detalle), o "al cargar" del informe

Por cierto, por código también lo puedes hacer con IIf:

Me.Observacion = IIF([NOTA]>=5,"APROBADO",IIF([NOTA]<5,"SUSPENSO",""))

Es más, ni siquiera te haría falta (ni en el código ni en la expresión del cuadro de texto) el segundo SiInm/IIf:

=SiInm([nota]>=5;"APROBADO";"SUSPENSO")

Me.Observacion=IIF([NOTA]>=5,"APROBADO","SUSPENSO")

Por otro lado, ¿estás escribiendo bien la función? SiInm es s-i-i-n-m (de Si Inmediato) ¿No estarás poniendo s-i-l-n-m (con una ele (L) en vez de una i)?

Respondo por orden:

1º Al poner el IIF si que funciona transforma el IFF al Silnm pero ahora si funciona

 correctamente.

2º En el evento al cargar el formulario funciona perfectamente. en el evento al dar formato de la sección detalle no me hace nada.

3º el Me.observación… funciona perfectamente

4º Comprobado sin el segundo iff o Silnm funciona perfectamente.

5º La expresión si la escribía incorrectamente, ponía Silnm. Soy un desastre :(. Con Siinm funciona perfecto.

Para que el evento "al dar formato" se ejecute tienes que abrir el informe en vista preliminar, en cualquier otra vista, no actúa y por eso no te hace nada.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas