我有一个项目要在MS Access 2016完成,并且在一个问题上犹豫不决,这应该是容易解决的,然而,我不知道如何去做。
我正在开发的数据库是基于另一个数据库导出的一个庞大的、未经过滤的数据表。我有一个主表单headview,我在其中放置了两个子表单listview和detailview。listview按组合框排序。
接下来是“应该发生什么”:如果单击上述listview的条目,则detailview将显示单击条目的其他信息。
两个子窗体都基于相同的数据表。所以我继续尝试通过主键条目来匹配它们。然而,这是行不通的。detailview子窗体仍然是空的。我还试图为listview编写一个vba宏,其中的listview.click()也不起作用。
是否有方法将这两个子窗体连接到主窗体中?如果是的话,我该怎么做呢?
我对任何回应都很满意,
祝你愉快,-Ninsa
发布于 2018-11-01 11:50:21
好的,我终于找到了错误2455的原因,这是一个时间问题。
当首次调用listview窗体的过程Form_Current时,细节子窗体尚未绑定到详细子窗体控件,这将导致错误。
可能的解决办法
Option1:忽略错误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 SubOption2:控制子窗体控件的源对象
清除head窗体中子窗体控件的Source Object属性,并在加载head窗体时显式设置它们。
这就完全阻止了不幸的时机。
因此,在head forms load事件过程中添加以下内容:
Private Sub Form_Load()
Me.DetailSubformControl.SourceObject = "Table1Detail"
Me.DatasheetSubformControl.SourceObject = "Table1Datasheet"
End SubOption3:使用链接主/子字段
您可以使用细节子窗体控件的属性Link Master Fields和Link Child Fields。
为此,您必须在head窗体上创建一个名为ID的textbox控件,并通过将其属性Visible设置为False来隐藏它。
这个新控件将绑定到详细子窗体控件:将头部窗体上的详细子窗体控件的属性Link Master Fields和Link Child Fields设置为ID。
然后,listview表单的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发布于 2018-11-01 08:20:02
您应该处理Listview_Current事件的详细视图的筛选。一旦Listview更改记录,该事件就会触发。
您可以在listview的表单模块上为Listview_Current事件设置事件处理程序,也可以在父窗体中使用WithEvents来侦听该特定事件。
如果选择后者,请注意,Listview需要有一个表单模块,否则事件不会触发。
https://stackoverflow.com/questions/53096510
复制相似问题