Campo calculado en consulta sobre dos tablas

Tengo una base de datos sobre una academia de alumnos.

En una tabla figuran los alumnos y en otra en los grupos. Ambas están relacionadas a través de un campo llamado [grupo].

En el formulario para introducir los alumnos existe el campo [grupo] donde se le asigna al alumno el grupo.

Dicho campo es un desplegable vinculado a una consulta donde figura el nombre del grupo.

Lo que necesito es modificar dicha consulta de la que depende el campo [grupo] para que también recoja junto al nombre del grupo, otra columna donde figuren el nº de plazas libres.

La expresión requerida sería

libres: [plazas] - Cuenta([idalumno])

donde [plazas] es el campo de la tabla grupo donde figuran el nº máximo de plazas del grupo, a las que hay que restar el nº de alumnos que hay registrados en ese grupo (Cuenta([idalumno])).

2 respuestas

Respuesta
2

En mi opinión, la expresión que necesitas tendría que ser algo de este estilo, ya que quieres contar solo los alumnos de cada grupos:

libres: [plazas] - DCuenta("idalumno";"Alumnos";"grupo=" & [grupo])

Es decir, que te reste al campo plazas, la cuenta de los alumnos de la tabla alumnos (o grupos, según como tengas los datos) cuyo campo grupo corresponde con el campo grupo del registro en el que estás.

Disculpa, que te puse mal la expresión y no es DCuenta (que no es una función válida), sino DCont, es decir:

libres: [plazas] - DCont("idalumno";"Alumnos";"grupo=" & [grupo])

Para que lo veas más claramente, te adjunto un ejemplo "a lo rápido": http://www.filebig.net/files/3k4k9f223m

me da error de sintaxis, si la introduzco en SQL y si meto la formula directamente en la vista diseño de la consulta me dice: "puede que el campo '[grupo]' especificado haga referencia a más de una tabla de las mostradas en la clausula FROM de la instrucción SQL.

Pude ser porque el campo [grupo] se encuentre en las dos tablas alumnos y grupos??

Si el campo grupo está en las dos tablas, tienes que ponerle delante el nombre de la tabla, por ejemplo:

TGrupos. Grupo

Te resubo el archivo con el ejemplo adaptado con los nombres iguales: http://www.filebig.net/files/R57fewdPCR

Con la última sale bien la consulta, el problema es al asociar esa consulta al campo [grupo] del formulario [alumnos] donde se asigna el grupo al alumno.

El campo [grupo] del formulario es un desplegable y al introducir esa consulta en la pestaña origen de la final, el campo desplegable del formulario sale vacío.

A ver así: http://www.filebig.net/files/vGft7wKiFC 

El único cambio que he hecho es convertir la consulta en una consulta de totales, para que no se repitan en el desplegable los grupos (también se hubiera podido conseguir lo mismo con la consulta original y un SELECT DISTINCT en el origen del desplegable). Como verás en el formulario, el desplegable sí muestra correctamente los datos de la consulta...

Para resolver tus dudas de una vez, sin andar dando vueltas intentando que adivine cómo tienes tu BD, ¿por qué no subes una copia de la misma, con las dos tablas, la consulta y el formulario y un par de registros inventados? Así la reviso y te intento dar la solución adecuada a lo que tienes.

Y aunque no lo puse en el ejemplo, y como bien comenta Icue, se debería añadir en el evento "Al recibir el enfoque" del cuadro combinado un: Me. NombreCuadroCombinado. Requery, para que actualice los datos de la consulta subyacente al desplegable y muestre correctamente la información

el concepto está claro pero al aplicarlo en mis base de datos me aparece el campo en blanco.

te adjunto el fichero a ver si das con la tecla, porque sigo los pasos y no encuentro el fallo.

http://www.filebig.net/files/fz29yrP33B 

En la segunda BD veo que el cuadro combinado del formulario alumnos sí funciona correctamente.

Pero hay que hacer una precisión, tal como mandas la BD, como en los tres registros de la tabla alumnos no tienen grupo asignado, la consulta no devuelve resultados y por tanto el cuadro combinado aparece en blanco. Si quieres que te aparezcan todos los grupos, independientemente de si hay alumnos o no en cada grupo, has de modificar las propiedades de la combinación (clic derecho en la linea que une las tablas y elegir la opcion adecuada: mostrar todos los registros de grupos...).

Además, tal como tienes los datos, te señalaría que la relación entre las dos tablas deberías hacerla por el idgrupo, no por el nombre del grupo. Esto lo digo porque tienes dos grupos que se llaman GUARDIA CIVIL y la consulta te descuenta en los dos el único alumno que está en uno de ellos (ver BD que te devuelvo). Si la relación la hubieses hecho por el ID, no te pasaría eso.

http://www.filebig.net/files/64ARq6uM6e 

con el cambio en la propiedad de la relación como dices sale todos los grupos en el desplegable, pero aunque seleccione un grupo el alumno no se añade al grupo y al mirar en el formulario "grupo", aparecen todos vacíos.

y otra curiosidad, cómo has hecho para que la base de datos básica que me mandaste en el desplegable aparecían los títulos de "grupo / plazas / libres"

en mi base de datos, aun siendo la misma consulta, no aparecen los títulos en el desplegable.

Para que te aparezcan los "títulos" de las columnas solo has de modificar la propiedad "encabezados de columna" del cuadro combinado, en la pestaña Formato de sus propiedades.

En cuanto a lo de que no te aparezcan, es problema de tu configuración del cuadro combinado en el formulario alumnos: si le pones que la columna dependiente es la 2 (que se corresponde con plazas), no puedes esperar que los registros entre las tablas queden relacionados, porque no hay ningún grupos que sea un número de plaza. Si le cambias la columna dependiente a la primera, verás que ya te funciona.

Aquí la prueba: http://www.filebig.net/files/RxiQs2cka7 

muchísimas gracias

solucionado

No dejes de valorar la respuesta si te fue de ayuda.

Respuesta
2

Vamos a suponer que tengo la tabla Grupos

y la tabla Alumnos

Con ella construyo un formulario(te lo pongo continuo que se ve mejor) en el que cambio el cuadro de texto Grupo por un combinado, en el que en su origen de la fila, con el generador creo esta consulta

Así, cuando abro el formulario(no sé si quieres que te muestre las plazas ocupadas o las que queden libres) y elijo un grupo(en el primero como no hay nada ocupado)

Elijo un grupo, escribo un nombre, etc y cuando en el siguiente registro voy a elegir o escribir

Vuelvo a elegir otro de infantil y cuando voy al siguiente

Y si elijo otro

Por cierto, en el evento Al recibir el enfoque del combinado le he puesto

Grupo. Requery para que "reconsulte" su origen

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas