ms-access - 如何在 Access 中为多对多表输入数据?

标签 ms-access ms-access-2016

我确信这是一个基本问题,但我正在努力掌握 Access。

在我的例子中,我有两个表:Student 和 Subject,由联结表 StudentSubject 链接。 Student 和 Subject 是多对多的关系,一个学生可以学习多个科目,一个科目可以被很多学生学习。

具体不明白的是如何输入数据,让每个学生可以学习多个科目。我创建了一个带有子表单的表单,如下所示:

enter image description here

当我尝试在“SubjectName”字段中输入任何内容时,它显示“字段无法更新”。如果我按“确定”,消息消失,我可以在该字段中键入内容,但当我尝试在下面的“主题”记录中输入其他内容时,会出现相同的错误。然后,当我按箭头转到表单上的下一条记录并保存表单时,任何表格都没有任何变化。

enter image description here

下面是三个表及其关系:

enter image description here

我不太确定我在这里做错了什么,但最终目标是我可以输入一个学生,还可以输入他们正在做的所有科目,以便存储每个学生的单独科目列表在他们的名字旁边。我不知道“无法更新字段”错误是从哪里来的。

谁能给个建议?

最佳答案

您需要 3 个表格:

  • 一份学生表格,
  • 主题的一种形式
  • Student-Subject 表的一种形式

Student-Subject 表单将是其他两种表单的子表单。此表单可以包含学生和主题的组合框。例如,编辑学生可能是这样的:

Student form with subject sub-form

这样,您可以轻松地添加学生正在学习的新科目(同样地,添加正在学习科目的新学生)。

请注意,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/

相关文章:

ms-access - 将 Microsoft Access 组合框中的默认值设置为当前月份

ms-access-2016 - 错误您尝试打开的数据库需要较新版本的 Microsoft Access

sql - 左连接后如何找到重复的记录\值?

c# - 连接 MS Access,而另一个应用程序使用相同的 MS Access 文件

java - 创建 ODBC 数据源 java

vba - 在 Access 文本框中创建多个链接

sql - 从 MS Access 表返回第 n 行时出现问题

windows - 如何隐藏 MS Access 父 MDI 窗口,但仍然显示 Windows 任务栏引用?

ms-access - MS-access报告-保存时未在任何记录中找到搜索关键字

vba - MS Access 2016 TreeView 错误 : "No object in this control element. Runtime error 438"