2012-08-06 77 views
1

是它在所有可能检测通过子窗体,同时仍然在父形式进行插入操作?的Microsoft Access:尝试检测父窗体内子窗体触发的插入

澄清:我有一系列的用于数据输入的形式,它们各自具有一个按钮用于添加到适当的表中的条目(使用的形式提供的数据)。我试图将它们中的每一个依次设置为“向导”父窗体中的子窗体,该窗体将遍历所有数据输入窗体。当涉及到形式之间切换,因为很明显,在这个父窗体的AfterInsert事件未检测出由包含在子窗体形式触发插入

我的问题就出现了。我知道我可以将插入的触发器移动到父窗体中的按钮;然而,据我所知,这将要求设置为每个数据项窗体作为公共按钮的点击事件中的代码,以便它们可以从父窗体的代码调用。我很怀念这样做,因此希望有其他选择。

+0

有一件事我忘了要注意的是,这些个人数据输入形式也意在精灵外使用,所以我不得不添加一些测试是否有实际上是父母形式。奇怪的是,尽管我在测试父对象是向导之前测试了父对象并非null,但如果是,则会触发错误,然后调用该对象。我通过设置错误处理忽略了这个问题来解决问题,但如果有人能够解释它为什么会发生,我会很感激。 – 2012-08-08 21:15:31

+1

正确的,你不能测试Me.Parent'是否'为null,因为你不能引用'Me.Parent'水平,除非'Me'是子窗体。所以你必须捕获错误#2452“你输入的表达式对Parent属性有一个无效的引用。” – HansUp 2012-08-09 00:46:41

回答

1

创建父形式的公共过程。

Public Sub Listener(ByVal pMsg As String) 
    MsgBox pMsg 
End Sub 

然后,在每个子窗体中,从插入后调用该过程。

Private Sub Form_AfterInsert() 
    Dim strMsg As String 
    strMsg = Me.Name & " inserted row." 
    Call Me.Parent.Listener(strMsg) 
End Sub 

如果窗体也可以单独使用(没有父),Me.Parent将抛出错误#2452,“您输入表达式有一个无效引用Parent属性。”你可以创建一个单独的函数来检查当前表单是否具有父级,并将代码基于函数的返回值。

Private Sub Form_Open(Cancel As Integer) 
    Dim strPrompt As String 
    If HaveParentForm(Me) = True Then 
     strPrompt = "I am a subform to '" & _ 
      Me.Parent.Name & "'." 
    Else 
     strPrompt = "I am a top level form." 
    End If 
    MsgBox strPrompt 
End Sub 

功能...

Public Function HaveParentForm(ByRef frm As Form) As Boolean 
    Dim blnReturn As Boolean 
    Dim strMsg As String 

On Error GoTo ErrorHandler 

    blnReturn = (Len(frm.Parent.Name) > 0) 

ExitHere: 
    HaveParentForm = blnReturn 
    On Error GoTo 0 
    Exit Function 

ErrorHandler: 
    Select Case Err.Number 
    Case 2452 ' The expression you entered has an invalid ' 
       ' reference to the Parent property. ' 
    Case Else 
     strMsg = "Error " & Err.Number & " (" & Err.Description _ 
      & ") in procedure HaveParentForm" 
     MsgBox strMsg 
    End Select 
    blnReturn = False 
    GoTo ExitHere 
End Function 
+0

谢谢,这个方法大部分工作。奇怪的是,子窗体的After Insert事件也没有被触发。在这一点上,我完全放弃了它,并将触发器的触发器移动到按钮单击事件的最后。 – 2012-08-08 21:10:53