我确信这是一个基本问题,但我正在努力掌握 Access。
在我的例子中,我有两个表:Student 和 Subject,由联结表 StudentSubject 链接。 Student 和 Subject 是多对多的关系,一个学生可以学习多个科目,一个科目可以被很多学生学习。
具体不明白的是如何输入数据,让每个学生可以学习多个科目。我创建了一个带有子表单的表单,如下所示:
当我尝试在“SubjectName”字段中输入任何内容时,它显示“字段无法更新”。如果我按“确定”,消息消失,我可以在该字段中键入内容,但当我尝试在下面的“主题”记录中输入其他内容时,会出现相同的错误。然后,当我按箭头转到表单上的下一条记录并保存表单时,任何表格都没有任何变化。
下面是三个表及其关系:
我不太确定我在这里做错了什么,但最终目标是我可以输入一个学生,还可以输入他们正在做的所有科目,以便存储每个学生的单独科目列表在他们的名字旁边。我不知道“无法更新字段”错误是从哪里来的。
谁能给个建议?
最佳答案
您需要 3 个表格:
- 一份学生表格,
- 主题的一种形式
- Student-Subject 表的一种形式
Student-Subject 表单将是其他两种表单的子表单。此表单可以包含学生和主题的组合框。例如,编辑学生可能是这样的:
这样,您可以轻松地添加学生正在学习的新科目(同样地,添加正在学习科目的新学生)。
请注意,Subject 和 Student 列都显示了。我过去所做的是使用一些 VBA 来根据父表单隐藏相应的列:
Option Explicit ' note that this code goes in the Student-Subject form. Private Sub Form_Load() If Me.HasParent Then Me.cboStudentID.ColumnHidden = (Me.Parent.Name = "frmStudent") Me.cboSubjectID.ColumnHidden = (Me.Parent.Name = "frmSubject") End If End Sub ''''''''''''''''''''''''''''''''''''''''''' Public Function HasParent() As Boolean On Error GoTo err_handle HasParent = Not Me.Parent Is Nothing Exit Function err_handle: HasParent = False Exit Function End Function
这样,根据您是在编辑学生(并且学生列将被隐藏)还是编辑主题(并且主题列将被隐藏)来隐藏相应的列。
关于ms-access - 如何在 Access 中为多对多表输入数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55849203/