创建包含子窗体的窗体(一对多窗体)

应用对象
Microsoft 365 专属 Access Access 2024 Access 2021 Access 2019 Access 2016

在 Access 中处理关系数据时,经常需要在同一窗体上查看多个表或查询。 例如,你可能希望同时查看一个表中的客户数据和另一个表中的客户订单信息。 使此操作更加简单,Access 提供了多种快速创建子窗体的方法。

你要做什么?

了解子窗体

子窗体是在另一个窗体中插入的窗体。 主要形式称为主形式,封闭形式称为子形式。 窗体/子窗体组合有时称为分层窗体、主/详细信息窗体或父/子窗体。

当您想要显示具有一对多关系的表或查询中的数据时,子窗体特别有效。 在此类关系中,主表中每条记录的主键值与匹配字段中的值匹配相关表中多条记录的字段值。 例如,可以创建一个显示员工数据的窗体和一个显示每个员工订单的子窗体。 “雇员”表中的数据是关系的“一”端。 “订单”表中的数据是关系的“多”侧,因为每个员工可以有多个订单。

包含子窗体的窗体

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

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

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

下表定义了与子窗体相关的术语。 如果使用本文中的过程,Access 会处理大部分细节,但如果以后需要更改,则了解后台发生的情况将很有帮助。

术语 定义
子窗体控件 将一个窗体嵌入另一窗体的控件。 您可以将子窗体控件看作是另一对象在数据库中的“视图”,不管这个对象是表、查询还是另一个窗体。 您可以通过子窗体控件提供的属性将控件中显示的数据链接到主窗体上的数据。
“源对象”属性 确定在控件中显示什么对象的子窗体控件属性。
数据表 以行和列的简单形式显示数据,与电子表格非常相似。 当子窗体控件的源对象为表或查询,或者其源对象为属性设置为 Datasheet的窗体Default View时,该子窗体控件将显示数据表。 在这些情况下,子窗体有时称为数据表或子数据表,而不称为子窗体。
“链接子字段”属性 子窗体控件的属性,指定子窗体中的哪些字段或字段将其链接到主窗体。
“链接主字段”属性 子窗体控件的属性,指定主窗体上的哪些字段或字段将其链接到子窗体。

注意

  • 为达到最佳效果,在按照本文中的过程操作前,应当先建立表关系。 这使 Access 可以自动在子窗体与主窗体之间创建链接。 若要查看、添加或修改数据库中表之间的关系,请在“ 数据库工具 ”选项卡的“ 关系 ”组中,单击“ 关系”。
  • 如果子窗体控件将窗体作为其源对象,则它包含放置在窗体上的字段。 可以将其作为单个窗体、连续窗体或数据表查看。 基于表单对象创建子窗体的一个优点是可以将计算字段添加到子窗体中,例如 [Quantity] * [Unit price]。
  • 可以通过创建源对象为表或查询的子窗体控件,向窗体中插入数据表或数据透视图。 有关详细信息,请参阅将相关数据添加到窗体而不创建子窗体部分。

返回页首

创建或添加子窗体

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

方案 建议的过程
您希望 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 就无法确定如何将子窗体链接到主窗体,并且 Link Child Fields 子窗体控件的 and Link Master Fields 属性为空。 您必须通过执行下列操作来手动设置这两个属性:

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

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

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

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

  5. 单击属性框旁边的Link Child Fields“生成”按钮。 将显示 “子窗体字段链接器 ”对话框。

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

    提示

    如果看不到要用于链接窗体的字段,则可能需要编辑主窗体或子窗体的记录源,以确保包含链接字段。 例如,如果窗体是基于查询的,则应确保链接字段出现在查询结果中。

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

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

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

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

返回页首

更改子窗体的默认视图

将子窗体添加到窗体时,子窗体/子报表控件会根据子窗体的 Default View 属性显示子窗体。 此属性可以设置为以下值:

  • 单个窗体
  • 连续窗体
  • 数据表
  • 分割窗体

首次创建子窗体时,此属性可能设置为 “连续窗体 ”或 “单个窗体”。 但是,如果将子窗体Datasheet的属性设置为 Default View ,则子窗体在主窗体上显示为数据表。

要设置子窗体的属性,请执行 Default View 以下操作:

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

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

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

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

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

    注意

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

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

返回页首

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

注意

更改表或查询的属性决定 Default View 了每次打开表或查询时的显示方式,无论是从导航窗格打开还是在子窗体/子报表控件中查看它。 因为更改表的视图设置有时会导致在从导航窗格打开表时造成混乱,因此建议在此过程中使用查询而不是表。

返回页首