Access - Acceder a datos de una tabla con un filtro

 
Vista:
Imágen de perfil de Cm
Val: 106
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Acceder a datos de una tabla con un filtro

Publicado por Cm (68 intervenciones) el 30/08/2018 17:55:07
Hola,

Tengo una tabla con muchos campos de tipo muy variado, en ella se guardan muchos registros de alumnos.

Cada una de estas tablas tiene una IdAlumno y una IdMateriales. Para saber qué materiales tiene cada alumno, miro la referencia en IdMateriales.
Los materiales pueden ser del tipo '1', '2', '3'....n. Son grupos de materiales.

La tabla puede ser por ejemplo:

IdAlumno IdMateriales
------------- ----------------
19 '2'
19 '2'
19 '1'
19 '1'
19 '3'

El caso es que estoy haciendo un formulario que me permita ver cuántos grupos de materiales tiene un alumno.

Quisiera poder decir en una caja de Texto: El alumno de código 19 tiene 3 grupos de materiales:
1 con 2 elementos del grupo '2'.
1 con 2 elementos del grupo '1'.
1 con 1 elemento del grupo '3'.

De momento, he probado con un comando DCount(), que tendría que devolver un integer con el número de registros que haya con un determinado Id.
Lo he hecho así:
1
cadena = DCount("[IdMateriales]", "Clase", "[IdAlumno] = " & Id & "")

Es decir, en la tabla Clase, y dado un IdAlumno determinado, buscar cuántos registros de IdMateriales hay.

Sin embargo me dice 19 cuando es 5.

¿Alguna ayuda?
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

Acceder a datos de una tabla con un filtro

Publicado por Anonimo (3330 intervenciones) el 30/08/2018 18:25:19
De donde se toma el valor que debería tener la variable 'Id' ?

Si esa variable careciese de contenido, el filtro presentaría un error y no se tendría en cuenta, esto es, el DCount devolvería todos los registros (o esa debería ser su respuesta).

Por cierto, DCount cuenta REGISTROS no campos o su contenido (para eso estaría DSum y demás), por lo que esa expresión se podría simplificar:

1
cadena = DCount("*", "Clase", "[IdAlumno] = " & Id & "")

Nota, si Id es un cuadro de texto del (supuesto) formulario en que se ejecuta la acción, se le debería indicar:

1
cadena = DCount("*", "Clase", "[IdAlumno] = " & Me.Id & "")

Y si como supongo el dato es un valor NUMERICO lo correcto seria asi:
1
cadena = DCount("*", "Clase", "[IdAlumno] = " & Me.Id)

Y si fuera alfanumérico (texto) lo correcto seria esto:
1
cadena = DCount("*", "Clase", "[IdAlumno] = '" & Me.Id &"'")

(añadir una cadena vacía al final es …. utilizar humo)


Hay un planteamiento que permitiría hacer eso en un único paso:
Una consulta de agrupación (agrupando por IDAlumno + IdMaterial y contando por cualquier campo).

Esta consulta como origen de datos del subformulario (utilizar un cuadro de texto requiere mas dominio sobre Access) daría todos los alumnos y sus particulares agrupaciones, al relacionarla con el ID alumno del formulario principal, se auto-filtraría mostrando solo los datos del alumno coincidente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Cm
Val: 106
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Acceder a datos de una tabla con un filtro

Publicado por Cm (68 intervenciones) el 31/08/2018 13:15:56
La variable Id viene del formulario en el que estamos, y que es la ficha del alumno.

¿Esto se podría resolver con una instrucción SQL que abarcar tres tablas?
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

Acceder a datos de una tabla con un filtro

Publicado por Anonimo (3330 intervenciones) el 01/09/2018 00:27:57
Según lo que cada uno entienda por 'instrucción SQL' y sepa de que va cada una de esas tres desconocidas tablas, de lo que quiera hacer con los datos que contienen y de que el resto de esa ignota aplicación lo acepte, porque si se crea a base de tomar un poco de aquí y otro de allá, probablemente la pueda volver inestable.
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