MS Access筛选器子表单(DataSheet)和另一个子表单(列表)

时间:2018-11-01 06:59:48

标签: ms-access access-vba ms-access-2016

我有一个要在MS Access 2016中完成的项目,并且在一个Issue上加注,应该很容易解决,但是,我不知道该怎么做。

我正在开发的数据库基于另一个数据库导出的未经过滤的庞大数据表。我有一个主表单headview,在其中放置了两个子表单listviewdetailviewlistview按组合框排序。

现在“应该”会发生什么:如果单击所说的listview条目,则detailview会显示该单击条目的其他信息。

两个子窗体都基于相同的数据表。因此,我继续尝试通过主键条目匹配它们。但是,那没有用。 detailview子表单仍然为空。我还尝试用listviewlistview.click()编写一个vba宏,但也没有用。

是否可以在主表单中连接这两个子表单?如果是这样,我该怎么做?

我很高兴收到任何回应,

祝你有美好的一天 -Ninsa

3 个答案:

答案 0 :(得分:0)

您应该在Listview_Current事件中处理 detailview 的过滤。 Listview更改记录后立即触发该事件。

您可以在列表视图的表单模块上为Listview_Current事件设置事件处理程序,也可以在父表单中使用WithEvents来监听该特定事件。

如果选择后者,请注意Listview必须具有表单模块,否则事件将不会触发。

答案 1 :(得分:0)

鉴于您的数据源的ID字段为ID,并且详细信息子窗体控件被命名为DetailSubformControl,此示例可以正常工作。

将此代码放置到listview子表单的Form_Current事件中(在您移动到的每条记录上都会触发该事件):

Private Sub Form_Current()
    ' Set a reference to the detail subform control
    With Me.Parent.DetailSubformControl
        ' Set the filter of its contained form to the current ID of the listview.
        ' The "'" are only necessary if it is a text and not a numeric field.
        .Form.Filter = "[ID] = '" & Me.ID.Value & "'"
        .Form.FilterOn = True
    End With
End Sub

答案 2 :(得分:0)

好的,最后我得到了错误2455的原因,这是一个计时问题。

首次调用列表视图表单的过程Form_Current时,详细信息子表单尚未绑定到详细信息子表单控件,这会导致错误。

可能的解决方案

选项1:忽略错误2455

On Error Resume Next过程的顶部添加Form_Current或重写它以处理该特定错误2455:

Private Sub Form_Current()
    On Error GoTo Catch

    With Me.Parent.DetailSubformControl.Form
        .Filter = "[ID] = '" & Me.ID.Value & "'"
        .FilterOn = True
    End With

Finally:
    Exit Sub

Catch:
    If Err.Number = 2455 Then Resume Finally
    MsgBox Err.Number & "(" & Err.Description & ") occured.", vbExclamation, "Attention"
    Resume Finally
End Sub

选项2:控制子窗体控件的源对象

清除标题表单中子表单控件的Source Object属性,并在加载标题表单时将其显式设置。

这完全可以避免不幸的时机。

因此在头部表单加载事件过程中添加以下内容:

Private Sub Form_Load()
    Me.DetailSubformControl.SourceObject = "Table1Detail"
    Me.DatasheetSubformControl.SourceObject = "Table1Datasheet"
End Sub

选项3:使用链接主/子字段

您可以使用detail子窗体控件的属性Link Master FieldsLink Child Fields

因此,您必须在头窗体上创建一个名为ID的文本框控件,对于美观方面,可以通过将其属性Visible设置为False来隐藏它。

此新控件将绑定到detail子窗体控件: 将头部表单上的详细信息子表单控件的属性Link Master FieldsLink Child Fields都设置为ID

列表视图表单的Form_Current过程仅包含以下内容:

Private Sub Form_Current()
    ' Set the value of the hidden control 'ID' on the head form,
    ' which is bound to the detail subform control, to the selected ID.
    Me.Parent.ID.Value = Me.ID.Value
End Sub