如何在保持表关系完整性的同时从 MS Access 数据输入表单添加数据
Posted
技术标签:
【中文标题】如何在保持表关系完整性的同时从 MS Access 数据输入表单添加数据【英文标题】:How to add data from MS Access Data Entry form while maintaining the table relationship integrity 【发布时间】:2011-12-04 23:24:40 【问题描述】:我有一个学生和课程表。
Student
ID - Primary Key - AutoNumber
CID - Number
FirstName - Text
LastName - Text
Course
ID - Number
CourseTitle - Text
我有一个数据输入子表单,我可以在其中输入CourseTitle
、FirstName
和LastName
,当我单击保存记录时,数据将保存到学生和课程表中。但是,当我第二次输入相同的课程标题时,它会在具有不同 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
Data的状态变成
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
【问题讨论】:
你有学生作为课程的子形式吗?在进行数据输入时反之亦然?如果没有,它将添加单独的记录。 我建议使用第三张表来处理 Student - Course 多对多关系。这样您就可以在不复制学生记录的情况下添加学生 ID 和课程 ID(除非有两个学生名为 Mike Some。 【参考方案1】:如果您接受 Jeff O 的建议并将其实现为多对多关系,您肯定会更好。
就数据输入表单而言,输入课程的控件应该是组合框或列表框。控件源将控件绑定到多对多表中的课程 ID 字段(或者,在您拥有的示例中,绑定到学生表中的 CID 字段)。控件的行源绑定到课程表或从表派生的查询。 “绑定列”应指定课程表的 ID 列。
这有点令人困惑,因为您绑定了两件事。第一个绑定将控件的值连接到表单的 RecordSource 中的列。第二个绑定将控件的 RowSource 中的列连接到控件的值。这两个绑定的组合允许用户通过更改控件的值来编辑给定记录的外键关系。
为避免在控件中显示 ID,您可以将绑定列的宽度设置为 0。例如,使用上面的示例,您可以在属性表中输入以下设置:
RowSource = Course
BoundColumn = 1
ColumnWidths = 0"
(由于您有两列,但只有一个列宽,未指定宽度的其余部分分配给最后一列。由于第一列宽度为零,这意味着整个显示宽度都分配给第二列,所以您在列表中看到的只是课程名称。)
【讨论】:
以上是关于如何在保持表关系完整性的同时从 MS Access 数据输入表单添加数据的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 SQL 在 MS Access 中“删除”和未命名的关系/约束?