如何在保持表关系完整性的同时从MS Access数据输入表单添加数据

时间:2011-12-04 23:24:41

标签: database ms-access

我有学生和课程表。

Student
  ID - Primary Key - AutoNumber
  CID - Number
  FirstName - Text
  LastName - Text

Course
  ID - Number
  CourseTitle - Text

我有一个数据输入子表单,我可以输入CourseTitleFirstNameLastName,当我点击保存记录时,数据会保存到学生表和课程表中。但是,当我第二次输入相同的课程标题时,它会在课程表中添加另一行具有相同名称且具有不同ID的行。如果我输入的课程名称已经存在,那么不应该添加新的课程标题。

实施例

假设在保存记录之前,数据状态为:

Course
-------

ID     | CourseTitle
-------|-------------
1      | Maths

Student
-------

ID      | CID    | FirstName    | LastName
--------|--------|--------------|----------
1       | 1      | Mike         | Someone

现在,当我从数据输入表单中保存数据时:

Course Name = Maths
First Name = Junior
Last Name = Someone Else

数据状态变为

Course
-------

ID     | CourseTitle
-------|-------------
1      | Maths
2      | Maths

Student
-------

ID      | CID    | FirstName    | LastName
--------|--------|--------------|----------
1       | 1      | Mike         | Someone
2       | 2      | Mike         | Someone

问题 但是,我希望数据看起来像:

我怎样才能实现这一目标?

Course
-------

ID     | CourseTitle
-------|-------------
1      | Maths

Student
-------

ID      | CID    | FirstName    | LastName
--------|--------|--------------|----------
1       | 1      | Mike         | Someone
2       | 1      | Mike         | Someone

1 个答案:

答案 0 :(得分:0)

如果你采纳Jeff O的建议并将其作为多对多关系来实现,你肯定会更好。

就数据输入表格而言,输入课程的控制应该是组合框或列表框。控制源将控件绑定到多对多表中的课程id字段(或者,在示例中,将其绑定到students表中的CID字段)。控件的行源绑定到课程表或从表中派生的查询。 "绑定列"应指定课程表的ID列。

这有点令人困惑,因为你绑定了两件事。第一个绑定将控件的值连接到表单“RecordSource”中的列。第二个绑定将控件的RowSource中的列连接到控件的值。两个绑定的组合允许用户通过更改控件的值来编辑给定记录的外键关系。

要避免在控件中显示ID,可以将绑定列的宽度设置为0.例如,使用上面的示例,您可以在属性表中输入这些设置:

RowSource = Course
BoundColumn = 1
ColumnWidths = 0"

(由于您有两列,但只有一列宽度,未指定宽度的其余部分将分配给最后一列。由于第一列宽度为零,这意味着整个显示宽度将赋予第二列,所以你在列表中看到的就是课程的名称。)