在 Access 中处理关系数据时,通常需要在同一窗体上查看多个表或查询。 例如,你可能希望同时查看一个表中的客户数据和另一个表中的客户订单信息。 使用子窗体可以简化此操作,Access 提供了几种快速创建它们的方法。
你要做什么?
- 了解子窗体
- 创建或添加子窗体
- 使用窗体向导创建包含子窗体的窗体
- 使用子窗体向导将一个或多个子窗体添加到现有窗体
- 通过将一个窗体拖动到另一个窗体上来创建子窗体
- 在设计视图的新窗口中打开子窗体
- 更改子窗体的默认视图
- 将相关数据添加到窗体而不创建子窗体
了解子窗体
子窗体是插入到另一个窗体中的窗体。 主窗体称为主窗体,封闭窗体称为子窗体。 窗体/子窗体组合有时称为分层窗体、主窗体/详细信息窗体或父/子窗体。
当想要显示具有一对多关系的表或查询中的数据时,子窗体特别好用。 在此类型关系中,主表中每条记录的主键值与匹配字段或相关表中许多记录的字段的值匹配。 例如,可以创建一个显示员工数据的窗体和一个显示每个员工的订单的子窗体。 “雇员”表中的数据是关系的“一”端。 Orders 表中的数据是关系的“多”端,因为每个员工可以有多个订单。
主窗体显示关系“一”端的数据。
子窗体显示关系“多”端的数据。
主窗体和子窗体以这种形式链接在一起,这样,子窗体只会显示与主窗体中当前记录有关的记录。 例如,当主窗体显示陶湘的信息时,子窗体只会显示她的订单。 如果窗体和子窗体已取消链接,子窗体将显示所有订单,而不仅仅是 Nancy 的。
下表定义了与子窗体相关的术语。 如果使用本文中的过程,Access 会处理大部分详细信息,但如果以后需要进行更改,则了解后台发生的情况会有所帮助。
| 术语 | 定义 |
|---|---|
| 子窗体控件 | 将一个窗体嵌入另一窗体的控件。 您可以将子窗体控件看作是另一对象在数据库中的“视图”,不管这个对象是表、查询还是另一个窗体。 您可以通过子窗体控件提供的属性将控件中显示的数据链接到主窗体上的数据。 |
| “源对象”属性 | 确定在控件中显示什么对象的子窗体控件属性。 |
| 数据表 | 以行和列的简单形式显示数据,与电子表格非常相似。 当子窗体控件的源对象是表或查询,或者当其源对象是属性设置为 Datasheet的窗体Default View时,子窗体控件将显示数据表。 在这些情况下,子窗体有时称为数据表或子数据表,而不称为子窗体。 |
| “链接子字段”属性 | 子窗体控件的 属性,指定子窗体中的哪个字段将其链接到主窗体。 |
| “链接主字段”属性 | 子窗体控件的 属性,指定主窗体上的哪些字段将其链接到子窗体。 |
注意
- 为达到最佳效果,在按照本文中的过程操作前,应当先建立表关系。 这使 Access 可以自动在子窗体与主窗体之间创建链接。 若要查看、添加或修改数据库中表之间的关系,请在“ 数据库工具” 选项卡上的“ 关系 ”组中,单击“ 关系”。
- 当子窗体控件将窗体作为其源对象时,它将包含您放置在窗体上的字段。 可以将其作为单个窗体、连续窗体或数据表进行查看。 基于窗体对象的子窗体的一个优点是,可以将计算字段添加到子窗体,例如
[Quantity] * [Unit price]。 - 可以通过创建源对象为表或查询的子窗体控件,向窗体中插入数据表或数据透视图。 有关详细信息,请参阅将相关数据添加到窗体而不创建子窗体部分。
创建或添加子窗体
使用下表确定最适合您的具体情况的过程。
| 方案 | 建议的过程 |
|---|---|
| 您希望 Access 同时创建主窗体和子窗体,并将子窗体链接到主窗体。 | 使用窗体向导创建包含子窗体的窗体 |
| 您希望使用现有窗体作为主窗体,但希望 Access 创建新的子窗体并将它添加到主窗体。 | 使用子窗体向导向现有窗体添加一个或多个子窗体 |
| 您希望使用现有窗体作为主窗体,并且希望将一个或多个现有窗体作为子窗体添加到该窗体。 | 通过将一个窗体拖动到另一个窗体上来创建子窗体 |
使用窗体向导创建包含子窗体的窗体
此过程可以通过使用窗体向导创建新的窗体与子窗体组合。 如果尚未创建要用作主窗体或子窗体的窗体,则这也是开始操作的最快方法。
在“创建”选项卡上的“窗体”组中,单击“窗体向导”。
在向导第一页上的“表/查询”下拉列表中,选择一个表或查询。 对于此示例,若要创建显示子窗体中每个员工的订单的 Employees 窗体,请选择“ 表:员工 (一对多关系) 的”一“端。
注意
您先选择哪个表或查询无关紧要。
在此表或查询中双击您要包括的字段。
在向导同一页上的“表/查询”下拉列表中,从列表中选择另一个表或查询。 对于此示例,选择“订单”表 (一对多关系) 的“多”端。
在此表或查询中双击要包括的字段。
单击“下一步”时(假设在启动该向导之前已对关系进行了正确设置),向导会询问“请确定查看数据的方式:”,也就是按哪个表或查询查看数据。 选择一对多关系的“一”端的表。 对于此示例,若要创建“员工”窗体,请选择“ 员工”。 向导会显示一个小窗体图。 该页应类似于下图:
窗体图表下半部分中的框代表子窗体。
注意
如果向导没有询问“请确定查看数据的方式”,这意味着 Access 没有在你选择的表或查询之间检测到一对多关系。 向导将继续,但 Access 不会向窗体中添加子窗体。 你可能希望单击“取消”并检查表关系,然后继续。
在向导页的底部,选择“带有子窗体的窗体”,然后单击“下一步”。
在“请确定子窗体使用的布局” 页上,单击所需的布局选项,然后单击“下一步”。 这两种布局样式都以行和列形式排列子窗体数据,但表格布局提供了更多选项。 您可以向表格式子窗体添加颜色、图形和其他格式元素,而数据表则更加紧凑,像表的数据表视图一样。
在向导的下一页中,为窗体选择一种格式样式,然后单击“下一步”。 如果在上一页中选择了“表格”,则选择的格式样式也将应用于子窗体。
在向导的最后一页上,为窗体键入所需的标题。 Access 会根据您键入的标题命名窗体,并根据您为子窗体键入的标题标记子窗体。
指定是要在窗体视图中打开窗体,以便可以查看或输入信息,也可以在设计视图中打开窗体,以便可以修改其设计,然后单击“ 完成”。 Access 创建两个窗体 - 一个用于包含子窗体控件的主窗体,一个用于子窗体本身。
使用子窗体向导向现有窗体添加一个或多个子窗体
使用此过程可以向现有窗体中添加一个或多个子窗体。 对于每个子窗体,可以选择让 Access 创建一个新窗体或使用现有窗体作为子窗体。
- 在导航窗格中右键单击现有窗体,然后单击“设计视图”。
- 在“ 窗体设计 ”选项卡上的“ 控件 ”组中,单击向下箭头以显示 “控件 ”库,并确保选择了“ 使用控件向导 ”。
- 在“ 窗体设计 ”选项卡上的“ 控件 ”组中,单击“ 子窗体/子报表 ”按钮。
- 单击要放置子窗体的窗体。
- 按照向导中的说明操作。 单击“完成”时,Access 会向窗体添加子窗体控件。 如果选择让 Access 为子窗体创建新的窗体而不是使用现有窗体,则 Access 会创建新的窗体对象,并将其添加到导航窗格中。
通过将一个窗体拖动到另一个窗体上来创建子窗体
如果要使用现有窗体作为主窗体,并将一个或多个现有窗体作为子窗体添加到其中,请使用此过程。
- 在导航窗格中,右键单击要用作主窗体的窗体,然后单击“布局视图”。
- 将要用作子窗体的窗体从导航窗格拖到主窗体中。 Access 会向主窗体添加子窗体控件,并将该控件绑定到你从导航窗格拖出的窗体。 Access 还会尝试根据在数据库中定义的关系将子窗体链接到主窗体。
- 重复此步骤,直到将其他任意子窗体添加到主窗体中。
- 若要验证链接是否成功,请在“开始”选项卡上的“视图”组中,依次单击“视图”和“窗体视图”,然后使用主窗体的记录选择器来选择多个记录。 如果子窗体针对每个雇员的筛选正确,则该过程完成。
如果上一个测试不起作用,Access 无法确定如何将子窗体链接到主窗体,并且 Link Child Fields 子窗体控件的 和 Link Master Fields 属性为空。 您必须通过执行下列操作来手动设置这两个属性:
在导航窗格中右键单击主窗体,然后单击“设计视图”。
单击子窗体控件一次将它选中。
如果未显示“属性表”任务窗格,请按 F4 显示它。
在属性表中,单击“数据”选项卡。
单击属性框旁边的
Link Child Fields“生成”按钮。
此时将显示 “子窗体字段链接器 ”对话框。在“主字段”和“子字段”下拉列表中,选择要用于链接窗体的字段,然后单击“确定”。 如果不确定要使用哪些字段,请单击“建议”让 Access 尝试确定链接字段。
提示
如果看不到要用于链接窗体的字段,则可能需要编辑主窗体或子窗体的记录源,以确保包含链接字段。 例如,如果窗体是基于查询的,则应确保链接字段出现在查询结果中。
保存主窗体,切换到窗体视图,然后验证窗体是否按照您预期的方式工作。
在设计视图的新窗口中打开子窗体
在设计视图中处理主窗体时,若要对其中的子窗体进行设计更改,可以在子窗体的窗口中打开子窗体:
- 单击子窗体将其选中。
- 在“ 窗体设计 ”选项卡上的“ 工具” 组中,单击“ 新建窗口中的子窗体”。
更改子窗体的默认视图
向窗体添加子窗体时,子窗体/子报表控件根据子窗体的 Default View 属性显示子窗体。 此属性可以设置为以下值:
- 单个窗体
- 连续窗体
- 数据表
- 分割窗体
首次创建子窗体时,此属性可能设置为 “连续窗体” 或“ 单窗体”。 但是,如果将子窗体的 属性设置为 Default ViewDatasheet,子窗体将在主窗体上显示为数据表。
设置 Default View 子窗体的 属性:
关闭任何打开的对象。
在导航窗格中,右键单击子窗体,然后单击“设计视图”。
如果尚未显示属性表,请按 F4 显示它。
在属性表顶部的下拉列表中,确保选中了“窗体”。
在属性表的“格式”选项卡上,将“默认视图”属性设置为要使用的视图。
注意
如果要使用的视图不在列表中,请确保
Allow...View该视图的 属性设置为 “是”。 例如,如果希望指定“数据表”作为窗体的默认视图,请确保“允许数据表视图”属性设置为“是”。保存并关闭子窗体,然后打开主窗体以检查结果。
将相关数据添加到窗体而不创建子窗体
并不总是需要创建单独的表单对象来显示相关数据。 例如,如果正在布局视图或设计视图中处理窗体,并且将表或查询从导航窗格拖动到窗体中,则 Access 会创建显示该对象中数据的子窗体/子报表控件。 对象的 Default View 属性确定数据的显示方式。 通常,这设置为“数据表”视图,但你也可以将表或查询的 属性设置为Default View“单窗体”、“拆分窗体”或“连续窗体”,从而更灵活地在窗体上显示相关数据。
注意
更改 Default View 表或查询的属性将确定何时打开表或查询的显示方式,无论是从导航窗格打开它还是在子窗体/子报表控件中查看它。 因为更改表的视图设置有时会导致在从导航窗格打开表时造成混乱,因此建议在此过程中使用查询而不是表。