0

我有一個子窗體的主窗體。主窗體綁定到一個表,其中主鍵爲ID1,外鍵爲ID2將主表格從Subfrom移動到特定記錄

主要形式/子窗體關係建立在ID2,所以主要的形式將顯示1所記錄的時間,然後子窗體將顯示所有相關記錄在主窗體上當前的記錄相匹配ID2說。

我想使用的子窗體記錄中的命令按鈕,這樣我可以在主窗體的子窗體使用ID1場移動到特定記錄:

Private Sub cmdLoadAssess_Click() 

    Dim rs As DAO.Recordset 
    Dim frm As Form 

    Set frm = Me.Parent 
    Set rs = frm.RecordsetClone 

    rs.FindFirst "ID1=" & Me.ID1 

    If _ 
     Not rs.NoMatch _ 
    Then   
     Debug.Print "Match found for " & Me.ID1 
     frm.Bookmark = rs.Bookmark   
    Else   
     Debug.Print "No match found for " & Me.ID1  
    End If 

End Sub 

可惜,這似乎只是能夠在ID1上找到匹配主表單中的當前記錄(這是毫無意義的,因爲主表單已經存在!)

我知道這些記錄存在(它們就在子表單中),而那些Debug.Print行告訴我ID1正在傳遞子窗體。我在這裏錯過了什麼?

編輯: 做一個rs.MoveLast,然後檢查克隆記錄的rs.RecordCountrs!ID,似乎只有在主窗體上當前的記錄已被克隆的記錄,而不是整個表,主要的形式是後勢必。爲什麼它不克隆主表單的整個記錄​​集?

+0

我正要建議'rs.MoveLast'和'Debug.Print rs.RecordCount' - 你確定的主要形式有完整的表格作爲記錄來源,而不僅僅是一條記錄?你可以在主窗體中手動導航嗎? – Andre

+0

我想我已經發現了我的問題(與剛剛提到的問題相同),但我需要測試它。當表單打開時,它打開一個特定的記錄,它似乎使用'。過濾表單的屬性。因此,在嘗試查找其中的其他記錄之前,記錄集本質上已經過濾了。 –

+1

在這種情況下,你會'frm.Filter =「ID1 =」&Me.ID1'而不是使用書籤。 – Andre

回答

0

嘿。 :)

總之,如果你打開一個表格像這樣顯示1個記錄

DoCmd.OpenForm "MainForm", WhereCondition:="ID1 = " & someId 

它設置形式的.Filter屬性(.FilterOn = True)。

要顯示出不同的記錄,則更換過濾器:

frm.Filter = "ID1 = " & Me.ID1 
0

我的表單已使用DoCmd.OpenForm方法的WhereCondition參數打開到特定記錄。

這會導致表單的.Filter屬性設置爲WhereCondition

RecordsetClone用於過濾表單時,它被克隆到其過濾狀態,因此試圖在該克隆記錄集中查找任何其他記錄是徒勞的。

感謝來自@ andre451的意見,幫助我解決這個問題。正如所建議的,只需重新定義窗體的篩選器以匹配選定的子窗體記錄的伎倆:

Private Sub cmdLoadAssess_Click() 

    Dim frm As Form 

    Set frm = Me.Parent 

    frm.filter = "ID1=" & Me.ID1 

    Set frm = Nothing 

End Sub 
相關問題