我有一个要在MS Access 2016中完成的项目,并且在一个Issue上加注,应该很容易解决,但是,我不知道该怎么做。
我正在开发的数据库基于另一个数据库导出的未经过滤的庞大数据表。我有一个主表单headview
,在其中放置了两个子表单listview
和detailview
。 listview
按组合框排序。
现在“应该”会发生什么:如果单击所说的listview
条目,则detailview
会显示该单击条目的其他信息。
两个子窗体都基于相同的数据表。因此,我继续尝试通过主键条目匹配它们。但是,那没有用。 detailview
子表单仍然为空。我还尝试用listview
为listview.click()
编写一个vba宏,但也没有用。
是否可以在主表单中连接这两个子表单?如果是这样,我该怎么做?
我很高兴收到任何回应,
祝你有美好的一天 -Ninsa
答案 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
时,详细信息子表单尚未绑定到详细信息子表单控件,这会导致错误。
在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
清除标题表单中子表单控件的Source Object
属性,并在加载标题表单时将其显式设置。
这完全可以避免不幸的时机。
因此在头部表单加载事件过程中添加以下内容:
Private Sub Form_Load()
Me.DetailSubformControl.SourceObject = "Table1Detail"
Me.DatasheetSubformControl.SourceObject = "Table1Datasheet"
End Sub
您可以使用detail子窗体控件的属性Link Master Fields
和Link Child Fields
。
因此,您必须在头窗体上创建一个名为ID
的文本框控件,对于美观方面,可以通过将其属性Visible
设置为False
来隐藏它。
此新控件将绑定到detail子窗体控件:
将头部表单上的详细信息子表单控件的属性Link Master Fields
和Link 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