Crear una función SiInm en una consulta de Access

La presente es para ver si me hace el gran favor de indicarme como redacto la función SiInm en una consulta de Access 2007, pues el problema es que necesito dependiendo de los datos que tengo en la tabla Info General tomar un rango de edades y asignarles una puntuación que me permita asignarle la calificación apropiada, por ejemplo que el rango de edad menor o igual a 25 años se le asigne una calificación de 5 puntos, al rango de edad comprendido > de 25 años hasta los 30 años se le asigne una calificación de 4, y así sucesivamente. Por lo tanto tengo esta sintaxis que hice en el generador de expresiones en una consulta:
Calificacion de edad: =SiInm( [Info General]! [Edad] <=25,5,SiInm([Info General]![Edad] Entre 25 Y 30,4, SiInm([Info General]![Edad] Entre 31 Y 35,3, SiInm([Info General]![Edad] Entre 36 Y 40,2,1))))
Luego me salio un error: "La expresión que ha especificado tiene un numero no válido"
Entonces cambie la sintaxis dejándola así:
Calificacion de edad: =SiInm( [Info General]! [Edad] <=(25),(5),SiInm([Info General]![Edad] Entre (25) Y (30),(4), SiInm([Info General]![Edad] Entre (31) Y (35),(3), SiInm([Info General]![Edad] Entre (36) Y (40),(2),(1)))))
Resulta que me mostró la consulta, y todo me salio en este campo calculado con la palabra ERROR, y los campos donde la edad esta vacía me sale con el valor 1
No se como estrucutar esta sintaxis.

1 respuesta

Respuesta
2
Te explico un poco el problema que tienes: cuando quieres abarcar un rango de edades correlativo, como en tu caso, en el SiInm no puedes utilizar eso de <entre x e y>. ¿Por qué? Porque la función SiInm es una función secuencial; es decir, que examina los valores que le indicas uno detrás de otro, hasta llegar al final. Pero, en cuanto llega a la condición que es verdadera, ya no examina el resto de condiciones "a la derecha".
Sé que puede parecer un poco "complicado", pero en el fondo, pillado el truco es fácil.
Como me comentas que tienes campos vacíos te he puesto una primera condición, que te devolverá un 0 (cero) si el campo está vacío:
Lo que debes escribir es lo siguiente:
Calificacion de edad: SiInm(EsNulo([Edad]);0;SiInm([Edad]<=25;5;SiInm([Edad]<=30;4;SiInm([Edad]<=35;3;SiInm([Edad]<=40;2;1)))))
A ver si puedo clarificarte el funcionamiento: imagínate que tenemos la edad 27. SiInm empieza su análisis por la izquierda, y hace:
- ¿Es nulo? No -> Salta a la siguiente condición
- ¿Es menor o igual a 25? No -> Salta a la siguiente condición, pero esta ya queda descartada!
- ¿Es menor que 30? Sí -> Pues el valor "si verdadero" es 4
Y se para de analizar, escribiéndote el 4 como resultado de la función.
Espero haberme explicado más o menos claramente. Ante cualquier duda me comentas.
Ya me dirás si te ha ido bien.
Buenos días, gracias por su respuesta, hice lo siguiente en la consulta
Calificacion edad: SiInm(EsNulo([Info General]![Edad]),(0),SiInm([Info General]![Edad]<=(25),(5),SiInm([Info General]![Edad]<=(30),(4),SiInm([Info General]![Edad]<=(35),(3),SiInm([Info General]![Edad]<=(40),(2),(1))))))
Resulta que no me da aun la función, en algunas cedulas que están con el campo edad vacío, me sale el valor 0, pero todos los demás me muestra #Error
¿Por qué pones las edades y las puntuaciones entre paréntesis?
¿Es realmente necesario que añadas [Info General] delante de [Edad]? Es decir, en tu consulta, ¿tienes dos o más tablas en las que también aparezca [Edad]? ¿Si sólo tienes una tabla donde aparezca [Edad] no necesitas el [Info General]?
Dicho, de otra manera, y teniendo en cuenta que en la consulta sólo hay una tabla que contenga [Edad], ¿Por qué no te limitas a copiar lo que yo te he escrito?
Ni que decir tiene que he supuesto que el campo [Edad], en tu tabla, es un dato de tipo numérico. Si fuera un dato tipo texto deberías encerrar todas las edades (25, 30, 35 y 40) entre comillas.
Ya me dirás.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas