您将无法使用本机访问功能来做到这一点:为此,Subform2 必须是 subform1 的子级。
但是,您应该可以使用 VBA 轻松完成。
在 Subform1 控件中显示的窗体中,创建一个 Form_Current 事件。每当 Subform1 中的当前记录更改时,这将触发。然后使用该事件直接或间接重置 subform2 的记录源。
例如,假设 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 的名称,或者在将来的某个时间将此功能克隆到另一个表单,此代码无需重写或修改。