创建包含子窗体的窗体(一对多窗体)
Applies ToMicrosoft 365 专属 Access Access 2024 Access 2021 Access 2019 Access 2016

处理关系数据 (存储在 Access 中单独表中) 的相关数据时,通常需要在同一窗体上查看多个表或查询。 例如,可能需要同时查看来自一个表的客户数据以及来自另一个表的客户订单信息。 子窗体即为实现此目的的便利工具,而 Access 提供了多种可帮助快速创建子窗体的方法。

你要做什么?

了解子窗体

子窗体是指插入到其他窗体中的窗体。 主要窗体称为主窗体,窗体中包含的窗体称为子窗体。 窗体/子窗体的组合有时被称为分层窗体、大纲/细节窗体或父/子窗体。

要显示具有一对多关系的表或查询中的数据时,使用子窗体特别有效。 一对多关系是指两个表之间的关联,其中主表中每个记录的主键值对应于相关表中许多记录的一个或多个匹配字段的值。 例如,可以创建一个显示雇员数据的窗体,并包含显示每个雇员的订单的子窗体。 “雇员”表中的数据是关系的“一”端。 “订单”表中的数据是关系的“多”端(每个雇员都可以拥有多个订单)。

包含子窗体的窗体

1. 主窗体显示来自关系的“一”端的数据。

2. 子窗体显示来自关系的“多”端的数据。

主窗体和子窗体以这种形式链接在一起,这样,子窗体只会显示与主窗体中当前记录有关的记录。 例如,当主窗体显示陶湘的信息时,子窗体只会显示她的订单。 如果窗体和子窗体未链接在一起,则子窗体会显示所有订单,而不只是陶湘的订单。

下表定义了与子窗体关联的部分术语。 如果您按照本文提及的过程操作,则大部分细节问题将由 Access 处理,但是,如果您需要在以后进行修改,则了解幕后的操作将非常有用。

术语

定义

子窗体控件

将一个窗体嵌入另一窗体的控件。 您可以将子窗体控件看作是另一对象在数据库中的“视图”,不管这个对象是表、查询还是另一个窗体。 您可以通过子窗体控件提供的属性将控件中显示的数据链接到主窗体上的数据。

“源对象”属性

确定在控件中显示什么对象的子窗体控件属性。

数据表

以行和列的简单形式显示数据,与电子表格非常相似。 当子窗体控件的源对象为表或查询,或者当其源对象是“默认视图”属性设置为“数据表”的窗体时,该控件将显示数据表。 在这些情况下,子窗体有时称为数据表或子数据表,而不称为子窗体。

“链接子字段”属性

该子窗体控件属性指定子窗体中的哪个或哪些字段将子窗体链接到主窗体。

“链接主字段”属性

该子窗体控件属性指定主窗体中的哪个或哪些字段将主窗体链接到子窗体。

注意: 

  • 为达到最佳效果,在按照本文中的过程操作前,应当先建立表关系。 这使 Access 可以自动在子窗体与主窗体之间创建链接。 若要查看、添加或修改数据库中表之间的关系,请在“ 数据库工具” 选项卡上的“ 关系”组中,单击“ 关系”。

  • 当子窗体控件将某个窗体作为其源对象时,它将包含您置于该窗体上的字段,并且可以将其视为单个窗体、连续窗体或数据表。 使子窗体基于窗体对象的一个优点是,您可以向子窗体中添加计算字段,如“[数量] * [单价]”

  • 可以通过创建源对象为表或查询的子窗体控件,向窗体中插入数据表或数据透视图。 有关详细信息,请参阅将相关数据添加到窗体而不创建子窗体部分。

返回页首

创建或添加子窗体

使用下表确定最适合您的具体情况的过程。

方案

建议的过程

您希望 Access 同时创建主窗体和子窗体,并将子窗体链接到主窗体。

使用窗体向导创建包含子窗体的窗体

您希望使用现有窗体作为主窗体,但希望 Access 创建新的子窗体并将它添加到主窗体。

使用子窗体向导向现有窗体添加一个或多个子窗体

您希望使用现有窗体作为主窗体,并且希望将一个或多个现有窗体作为子窗体添加到该窗体。

通过将一个窗体拖动到另一个窗体上来创建子窗体

使用窗体向导创建包含子窗体的窗体

此过程可以通过使用窗体向导创建新的窗体与子窗体组合。 如果您尚未创建要用作主窗体或子窗体的窗体,这也是最快的入门方式。

  1. 在“创建”选项卡上的“窗体”组中,单击“窗体向导”。 

  2. 在向导第一页上的“表/查询”下拉列表中,选择一个表或查询。 对于本示例,为了创建显示子窗体中每个雇员的订单的“雇员”窗体,我们将选择“表:雇员”(一对多关系的“一”端)。

    注意: 您先选择哪个表或查询无关紧要。

  3. 在此表或查询中双击您要包括的字段。

  4. 在向导同一页上的“表/查询”下拉列表中,从列表中选择另一个表或查询。 对于本示例,我们将选择“订单”表(一对多关系的“多”端)。

  5. 在此表或查询中双击要包括的字段。

  6. 单击“下一步”时(假设在启动该向导之前已对关系进行了正确设置),向导会询问“请确定查看数据的方式:”,也就是按哪个表或查询查看数据。 选择一对多关系的“一”端的表。 本示例中,为了创建“雇员”窗体,我们将单击“按雇员”。 向导会显示一个小窗体图。 该页应类似于下图:

    窗体向导的子窗体页

    窗体图表下半部分中的框代表子窗体。

    注意: 如果向导没有询问“请确定查看数据的方式”,这意味着 Access 没有在你选择的表或查询之间检测到一对多关系。 向导将继续,但 Access 不会向窗体中添加子窗体。 你可能希望单击“取消”并检查表关系,然后继续。

  7. 在向导页的底部,选择“带有子窗体的窗体”,然后单击“下一步”

  8. “请确定子窗体使用的布局” 页上,单击所需的布局选项,然后单击“下一步”。 这两种布局样式都以行和列的形式排列子窗体数据,但表格式布局具有更大的自定义空间。 您可以向表格式子窗体添加颜色、图形和其他格式元素,而数据表则更加紧凑,像表的数据表视图一样。

  9. 在向导的下一页中,为窗体选择一种格式样式,然后单击“下一步”。 如果在上一页中选择了“表格”,则选择的格式样式也将应用于子窗体。

  10. 在向导的最后一页上,为窗体键入所需的标题。 Access 会根据您键入的标题命名窗体,并根据您为子窗体键入的标题标记子窗体。

  11. 指定是在窗体视图中打开窗体查看或输入信息,还是在设计视图中打开窗体修改相应设计,然后单击“完成”。

    Access 会创建两个窗体,一个用于包含子窗体控件的主窗体,另一个用于子窗体本身。

返回页首

使用子窗体向导向现有窗体添加一个或多个子窗体

使用此过程可以向现有窗体中添加一个或多个子窗体。 对于每个子窗体,可以选择让 Access 创建一个新窗体或使用现有窗体作为子窗体。

  1. 在导航窗格中右键单击现有窗体,然后单击“设计视图”。

  2. 在“ 窗体设计 ”选项卡上的“ 控件 ”组中,单击向下箭头以显示 “控件 ”库,并确保选择了“ 使用控件向导 ”。

  3. 在“ 窗体设计 ”选项卡上的“ 控件 ”组中,单击“ 子窗体/子报表 ”按钮。

  4. 单击窗体上要放置该子窗体的位置。

  5. 按照向导中的说明操作。

    单击“完成”时,Access 会向窗体添加子窗体控件。 如果选择让 Access 为子窗体创建新的窗体而不是使用现有窗体,则 Access 会创建新的窗体对象,并将其添加到导航窗格中。

通过将一个窗体拖动到另一个窗体上来创建子窗体

如果您希望使用现有窗体作为主窗体,并且希望将一个或多个现有窗体作为子窗体添加到该窗体,请使用此过程。

  1. 在导航窗格中,右键单击要用作主窗体的窗体,然后单击“布局视图”

  2. 将要用作子窗体的窗体从导航窗格拖到主窗体中。

    Access 会向主窗体添加子窗体控件,并将该控件绑定到你从导航窗格拖出的窗体。 Access 还会尝试根据在数据库中定义的关系将子窗体链接到主窗体。

  3. 重复此步骤,直到将其他任意子窗体添加到主窗体中。

  4. 若要验证链接是否成功,请在“开始”选项卡上的“视图”组中,依次单击“视图”“窗体视图”,然后使用主窗体的记录选择器来选择多个记录。 如果子窗体针对每个雇员的筛选正确,则该过程完成。

如果前面的测试无法正常工作,则 Access 无法确定如何将子窗体链接到主窗体,并且子窗体控件的“链接子字段”“链接主字段”属性将保留为空白。 您必须通过执行下列操作来手动设置这两个属性:

  1. 在导航窗格中右键单击主窗体,然后单击“设计视图”。

  2. 单击子窗体控件一次将它选中。

  3. 如果未显示“属性表”任务窗格,请按 F4 以显示该窗格。

  4. 在属性表中,单击“数据”选项卡。

  5. 单击“链接子字段”属性框旁边的“生成”按钮 “生成器”按钮

    会显示“子窗体字段链接器”对话框。

  6. 在“主字段”和“子字段”下拉列表中,选择要用于链接窗体的字段,然后单击“确定”。 如果不确定要使用哪些字段,请单击“建议”让 Access 尝试确定链接字段。

    提示: 如果您没有看到要用于链接窗体的字段,则可能需要对主窗体或子窗体的记录源进行编辑,以帮助确保链接字段包含在其中。 例如,如果窗体是基于查询的,则应确保链接字段出现在查询结果中。

  7. 保存主窗体,切换到窗体视图,然后验证窗体是否按照您预期的方式工作。

在设计视图的新窗口中打开子窗体

在设计视图中处理主窗体时,若要对其中的子窗体进行设计更改,可以在子窗体的窗口中打开子窗体:

  1. 单击子窗体将其选中。

  2. 在“ 窗体设计 ”选项卡上的“ 工具” 组中,单击“ 新建窗口中的子窗体”。

返回页首

更改子窗体的默认视图

向窗体添加子窗体时,子窗体/子报表控件会根据子窗体的“默认视图”属性显示子窗体。 此属性可以设置为以下值:

  • 单个窗体

  • 连续窗体

  • 数据表

  • 分割窗体

首次创建子窗体时,可将此属性设置为“连续窗体”,也可以设置为“单个窗体”。 不过,如果将子窗体的“默认视图”属性设置为“数据表”,则子窗体将显示为主窗体中的数据表。

若要设置子窗体的“默认视图”属性,请执行以下操作:

  1. 关闭任何打开的对象。

  2. 在导航窗格中,右键单击子窗体,然后单击“设计视图”。

  3. 如果属性表尚未显示,请按 F4 来显示它。

  4. 在属性表顶部的下拉列表中,确保选中了“窗体”

  5. 在属性表的“格式”选项卡上,将“默认视图”属性设置为要使用的视图。

    注意: 如果要使用的视图不在列表中,请确保视图的“允许...视图”属性设置为“”。 例如,如果希望指定“数据表”作为窗体的默认视图,请确保“允许数据表视图”属性设置为“是”

  6. 保存并关闭子窗体,然后打开主窗体以检查结果。

返回页首

将相关数据添加到窗体而不创建子窗体

不一定总是需要创建单独的窗体对象显示相关数据。 例如,如果正在布局视图或设计视图中处理窗体,并且将表或查询从导航窗格拖动到窗体中,则 Access 会创建显示该对象中数据的子窗体/子报表控件。 对象的“默认视图”属性可确定数据的显示方式。 通常,此属性设置为数据表视图,不过也可以将表或查询的“默认视图”属性设置为“单个窗体”、“分割窗体​​”或“连续窗体”,在窗体中显示相关数据时,这样就可以提供更大的灵活性。

注意: 更改表或查询的“默认视图”属性可以确定打开表或查询时的显示方式,以及是从导航窗格中打开表或查询还是在子窗体/子报表控件中查看。 因为更改表的视图设置有时会导致在从导航窗格打开表时造成混乱,因此建议在此过程中使用查询而不是表。

返回页首

需要更多帮助?

需要更多选项?

了解订阅权益、浏览培训课程、了解如何保护设备等。

社区可帮助你提出和回答问题、提供反馈,并听取经验丰富专家的意见。