【问题标题】:Multiple Subforms in Datasheet View in AccessAccess 中的数据表视图中的多个子窗体
【发布时间】:2014-12-08 20:13:03
【问题描述】:

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

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

我之前已经让它工作,如果用户点击子表单 1 中的记录,然后子表单 2 会动态更新以显示特定数据(这是当子表单 2 设置为单一表单视图时。

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

这是否可以通过本机 Access 功能实现,否则是否有 VBA 解决方案?

谢谢。

【问题讨论】:

  • subform2 是 subform1 中的子子窗体还是主窗体的另一个子窗体(如 subform1)?
  • 是的。子窗体 2 和子窗体 1 是主窗体的子窗体。

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


【解决方案1】:

您将无法使用本机访问功能来做到这一点:为此,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 的名称,或者在将来的某个时间将此功能克隆到另一个表单,此代码无需重写或修改。

【讨论】:

    猜你喜欢
    • 2014-03-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 2014-07-28
    相关资源
    最近更新 更多