首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有另一个子表单的MS访问筛选子表单(DataSheet) (列表)

带有另一个子表单的MS访问筛选子表单(DataSheet) (列表)
EN

Stack Overflow用户
提问于 2018-11-01 06:59:48
回答 2查看 1.8K关注 0票数 0

我有一个项目要在MS Access 2016完成,并且在一个问题上犹豫不决,这应该是容易解决的,然而,我不知道如何去做。

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

接下来是“应该发生什么”:如果单击上述listview的条目,则detailview将显示单击条目的其他信息。

两个子窗体都基于相同的数据表。所以我继续尝试通过主键条目来匹配它们。然而,这是行不通的。detailview子窗体仍然是空的。我还试图为listview编写一个vba宏,其中的listview.click()也不起作用。

是否有方法将这两个子窗体连接到主窗体中?如果是的话,我该怎么做呢?

我对任何回应都很满意,

祝你愉快,-Ninsa

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-01 11:50:21

好的,我终于找到了错误2455的原因,这是一个时间问题。

当首次调用listview窗体的过程Form_Current时,细节子窗体尚未绑定到详细子窗体控件,这将导致错误。

可能的解决办法

Option1:忽略错误2455

要么将On Error Resume Next添加到Form_Current过程的顶部,要么重写它以处理特定的错误2455:

代码语言:javascript
复制
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

Option2:控制子窗体控件的源对象

清除head窗体中子窗体控件的Source Object属性,并在加载head窗体时显式设置它们。

这就完全阻止了不幸的时机。

因此,在head forms load事件过程中添加以下内容:

代码语言:javascript
复制
Private Sub Form_Load()
    Me.DetailSubformControl.SourceObject = "Table1Detail"
    Me.DatasheetSubformControl.SourceObject = "Table1Datasheet"
End Sub

Option3:使用链接主/子字段

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

为此,您必须在head窗体上创建一个名为ID的textbox控件,并通过将其属性Visible设置为False来隐藏它。

这个新控件将绑定到详细子窗体控件:将头部窗体上的详细子窗体控件的属性Link Master FieldsLink Child Fields设置为ID

然后,listview表单的Form_Current过程只包含以下内容:

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2018-11-01 08:20:02

您应该处理Listview_Current事件的详细视图的筛选。一旦Listview更改记录,该事件就会触发。

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

如果选择后者,请注意,Listview需要有一个表单模块,否则事件不会触发。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53096510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档