2012-08-06 42 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