我的主访问表单有两个子表单,我熟悉使用linking字段链接父窗体和子窗体,以及在每个子窗体上链接子字段。
在我的表单上,Subform1链接到主窗体上的ID,而Subform2链接到Subform1上的ID。
我以前已经让它工作了,如果用户单击子表单1中的记录,那么子表单2就会被动态更新以显示特定的数据(这是将subform2设置为单个表单视图的时候)。
我要做的是,在数据表视图中获取两个子窗体,然后单击subform1上的一个记录,然后请求subform2查询在subform2中选择的项的所有相关记录。
如果使用本机访问功能,这是否可能,否则,是否有VBA解决方案?
谢谢。
发布于 2014-10-16 00:37:34
您将无法使用本机访问功能来完成此操作:为此,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中的数据可以保存为仅与Mainform上显示的人有关的数据,也可以使用Mainform的Form_Current事件来更改subform1的记录源,如下所示:
private sub Form_Current() 'on mainform
Subform1.Form.RecordSource = "SELECT * FROM PersonEpisode WHERE PersonID = " & me.ID
end sub
然后,使用form_Current中的subform1来保持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的名称,或者在将来的某个时候将此功能克隆到另一个表单,则无需重写或修改该代码。
https://stackoverflow.com/questions/26353956
复制相似问题