2017-03-14 2 views
0

Je demande une idée pour passer à ma base de données. Ma base de données concerne la gestion des notes des étudiants. J'ai trois niveaux de classe des élèves (classe A, B, C), où chaque classe a ses propres sujets illustrés ci-dessous:Remplir différents sujets pour chaque élève en fonction de son niveau de classe

Class A:    Class B:    Class C: 
Subject1    Subject4    Subject7    
Subject2    Subject5    Subject8 
Subject3    Subject6    Subject9 

maintenant. laisse présenter mes tables. J'ai deux tables liées (un à plusieurs) par le idEtudiant, le premier est « Touslesétudiants »:

Table: AllStudents 
StudentsID  StudentsNmae  ClassName 

Et la deuxième table est « StudentsMarks »

Table: StudentsMarks 
ID  StudentsID  SubjectName Mark1 Mark2  Mark3 

Ainsi, pour chaque élèves arrivant , les sujets correspondants doivent être répertoriés dans la troisième colonne (SubjectName) de la table StudentsMarks. Par exemple,

StudentsID  StudentsNmae  ClassName 
1     Alex    Class A 

      ID  StudentsID  SubjectName Mark1 Mark2  Mark3 
      1   1    Subject1 
      2   1    Subject2 
      3   1    Subject3     

StudentsID  StudentsNmae  ClassName 
2     Jimes    Class B 

      ID  StudentsID  SubjectName Mark1 Mark2  Mark3 
      4   2    Subject4 
      5   2    Subject5 
      6   2    Subject6 

Et ainsi de suite pour le reste des entrées. Une idée ou une approche pour y parvenir?

Répondre

0

Les élèves ne progresseront-ils pas dans les niveaux de classe? Cette base de données contiendra-t-elle des enregistrements pluriannuels? L'inclusion de cette valeur dans la table des étudiants nécessitera de la changer chaque année pour chaque élève. Peut-être avez-vous besoin d'une table distincte pour StudentRegistration qui inclut StudentID, Year, ClassLevel.

Avoir une table qui associe des sujets avec le niveau de classe. Ce dernier exemple ressemble à la sortie du rapport. Incluez la table ClassSubjects dans le rapport RecordSource afin que le niveau de classe soit disponible pour trier les enregistrements. Ceci sera également utile pour créer des comboboxes en cascade afin que les sujets disponibles pour la sélection pour un étudiant puissent être limités à ceux associés à l'étudiant de niveau cours.

L'ajout programmé d'un ensemble d'enregistrements peut être compliqué et il y a plus d'un moyen. Une approche implique une action SQL INSERT à l'aide de la table ClassSubjects suggérée et concatène les valeurs sélectionnées à partir de zones de liste déroulantes sur un formulaire.

CurrentDb.Execute "INSERT INTO StudentsMarks(StudentID, SubjectID) SELECT " & Me.cbxStudentID & " AS StuID, SubjectID FROM ClassSubjects WHERE ClassID = " & Me.cbxClassID 

Cet exemple est très simpliste et n'empêche pas l'insertion d'enregistrements en double. C'est là que le code peut être compliqué, en validant les données. Ce n'est pas une conception classique de DB et il faudra apprendre VBA et SQL assez avancés. Faire des recherches et apprendre, beaucoup d'exemples là-bas. Lorsque vous avez du code qui a un problème, postez-le pour analyse.

+0

Merci pour la réponse. En fait, c'est une base de données d'un an. le dernier exemple est une illustration des enregistrements relationnels. c'est-à-dire, lorsque le nouvel étudiant est entré, les marquages ​​étudiants seront générés. Je veux juste les sujets entrés automatiquement pas par l'utilisateur. – FSm

+0

Une table ne serait pas structurée comme ça. Cela ressemble à une sortie de rapport. Vous voulez créer des enregistrements StudentsMarks avant même que les marques ne soient disponibles? Nécessite le code VBA pour créer des enregistrements. – June7

+0

StudentsMarks serait créé comme une sous-table pour chaque étudiant !!! ils sont liés par ID comme une relation de un à plusieurs. Je veux juste quand un nouvel étudiant est enregistré, la troisième colonne de la table StudentsMarks (qui est référencée au SubjectName) est remplie par la classe correspondante – FSm