访问:您是否真的需要使用子表单?

问题描述 投票:0回答:2

所以我对MS Access可能有一个愚蠢的问题。如果我希望创建一个可用于填充关系数据库中多个表的表单,这些其他表是否必须由子表单表示?据我了解,您可以手动更改主窗体的RecordSource以包括罕见的一对一关系,但是这种方法对于一对多或多对多是否可行?关系?

从表面上看,这是不可能的-毕竟,Access将如何知道如何以页面上的一对多关系来排列多个元素?

我90%的答案是“不,除非设计一个代表关系模型的表单,除非它仅包含一对一的关系,否则您必须使用子表单”,但我仍然感到不满意如果我没有仔细检查这一点,因为我基本上没有任何经验就直接进入Access开发,并且我想确保自己没有犯明显的错误。

forms ms-access subform
2个回答
1
投票

不,当然您不是需要子表单。您可以自己编写所有代码来管理与加载相关的记录,更新和删除它们,切换记录,过滤等。

只是子表单是一种非常方便的工具,可供您使用。

并且,如果您不得不问这个问题,您可能应该使用子窗体,而不要尝试重新发明轮子。

<<

实际上,您可以编辑由于联接到主表和子表而产生的记录。
要使其正常工作,需要做一些事情。您必须对子表使用左连接(否则查询将不会返回任何记录。)

只要在查询中包括子表的FK列和父表的PK列,就可以使用。

因此,我们在关系中具有此设置。

enter image description here

注:非常关闭它是左联接。这允许(并意味着)父记录可以存在,而不是子记录。

现在建立这样的查询:

enter image description here

请注意前几列如何来自主表,后三列如何来自子表。

因此,当您打开查询时,假设没有子记录,那么您会得到以下信息:

enter image description here

请注意子reocrd不存在。如果我在子表列中输入数据或输入数据(例如发票编号),请移至保存位置,然后得到以下信息:

enter image description here

因此,在上述情况下,数据引擎确实知道要设置的FK值,因为您在一条主记录上。当然,您无法在此处执行的操作是添加多个子记录,因为您无法再次选择或重新输入主记录。但是,如果您单独添加(例如以子表单形式)多个子记录,那么您将获得以下信息:

enter image description here

再次,我可以编辑每一行,甚至可以编辑子列。

当然,由于这是左连接,因此每次为每个子记录重复主记录。

并且您可以绑定此查询并将其用于表单。

所以这样的设置用处不大,因为您不能将新的子记录添加到父记录中,但是您可以肯定地以这种方式编辑此类数据。它确实允许您添加“一个”记录或“编辑”一个子记录。因此,如果子记录不存在,则将其添加。如果子记录存在,则可以再次编辑该子记录中的值。但是,使用此用户界面只能添加一个子记录。

因此,虽然可以进行编辑,但它并不是可用的UI太多。


1
投票
© www.soinside.com 2019 - 2024. All rights reserved.