Access中数据表视图中的多个子表单

时间:2014-10-14 06:23:47

标签: forms access-vba ms-access-2010

我的主Access表单上有两个子表单,我熟悉使用每个子表单上的链接主字段和链接子字段链接父表单和子表单。

在我的表单上,Subform1链接到主窗体上的ID,Subform2链接到Subform1上的ID。

我以前使用过,如果用户点击子窗体1中的记录,则子窗体2会动态更新以显示特定数据(这是将子窗体2设置为单个窗体视图时。

我想要做的是,在数据表视图中获取两个子表单,然后单击子表单1上的记录,然后应该重新查询子表单2以查找在子表单2中选择的项目的所有相关记录。

这是否可以使用本机Access功能,否则,是否有VBA解决方案?

感谢。

1 个答案:

答案 0 :(得分:0)

您无法使用本机访问功能执行此操作:Subform2需要是subform1的子级。

但是你应该能够用VBA做到这一点。

在Subform1控件中显示的表单中,创建一个Form_Current事件。只要当前记录在Subform1中发生更改,就会触发此操作。然后使用该事件直接或间接重置子表单2的记录源。

例如,假设MainForm显示来自名为Person的表的信息,Subform1显示有关人与组织之间的联系事件的信息,Subform2详细说明了这些联系事件中的通信信息。

数据将是这样的:

Mainform: SELECT * FROM Person
Subform1:   SELECT * FROM PersonEpisode
Subform2:     SELECT * FROM EpisodeCommunication

如您所知,subform1中的数据可以保留为仅使用LinkChild / Master显示在Mainform上的人,或者Mainform的Form_Current事件可用于更改subform1的记录源,如下所示:

private sub Form_Current()    'on mainform
    Subform1.Form.RecordSource = "SELECT * FROM PersonEpisode WHERE PersonID = " & me.ID
end sub

同样,然后使用subform1中的form_Current将subform2保持为subform1:

private sub Form_Current()    'in Subform1
    Forms!Mainform!Subform2.Form.Recordsource = "SELECT * FROM EpisodeCommunication WHERE EpisodeID = " & me.EpisodeID
end sub

这应该可以正常工作。如果您愿意,可以改为:

private sub Form_Current()    'in Subform1
    Me.Parent!Subform2.Form.Recordsource = "SELECT * FROM EpisodeCommunication WHERE EpisodeID = " & me.EpisodeID
end sub

这在功能上与之前的定义相同,但删除了名称" MainForm"从调用开始,这意味着如果有人决定更改MainForm的名称,或者在将来的某个时刻将此功能克隆到另一个表单,则不必重写或修改此代码。