我是 MS Access 的新手。我有一个非常简单的植物分类数据库,我正在使用它来尝试学习和理解该程序。该数据库有三个表,如下所示:
这些表之间的关系如下:
强制执行引用完整性,并将相关字段设置为级联更新。然后,我使用表单向导构建了以下表单:
我在向导中选择了以下字段:
也许与某些人选择构建此类数据库的方式相反,我希望每个物种只看到一条记录,因此不想使用子表单。因此我选择了以下选项,并且对最终表单的布局感到满意。
当我尝试通过此表单添加新记录时,我可以输入“科”的数据,但尝试输入“属”或“物种”的数据时会出现“无法添加记录;表的连接键...不在记录集中”的错误。
在设置这些表格和表单时我做错了什么?
答案1
为了保持数据库的参照完整性,当向tblSpecies
表中添加记录时,字段GenusID
必须包含表中已存在的 ID tblGenus
,否则表中的记录tblSpecies
将成为孤立记录,从而破坏数据库的参照完整性。
同样,在向表中添加记录时tblGenus
,外键( )必须与表中记录的FamilyID
主键()相对应。ID
tblFamily
由于您不想使用子表单,因此您需要在向表中添加记录之前,使用所有可能的外键值预先填充您的tblFamily
&表;或者,在表单中添加一个按钮,该按钮将打开引用父表的表单,允许用户动态添加此类记录。tblGenus
tblSpecies
答案2
您无法修改 SQL 内连接 - 与底层表的关系将丢失。
您不应该通过基于查询的单个表单将数据输入到多个表中。在某些情况下可以这样做,但使用绑定到引用表的父表单,并在其中绑定到引用表的子表单是更好的解决方案。
这样,每个 for 或子表单都绑定到一张表,因此每个表都可以自行更新。