通过组合框移动到另一个记录在某些情况下不起作用

问题描述 投票:0回答:1

我有两种形式:'frmClient',(其中有一个列出申请人的子表单)和'frmDisclosure',它显示申请人的详细信息。在frmClient上有一个命令按钮,用于在frmDisclosure中打开指定的记录。该过程是Private Sub Command10_Click() - 见下文。这有效。

问题是,一旦通过frmClient进入frmDisclosure,就无法移动到另一条记录。在frmDiscloure中打开另一条记录的过程是在一个组合框控件中:Private Sub ComboFind_AfterUpdate()。这通常有效,但如果通过frmClient打开了frmDiscloure,它就无法工作。我在各种情况下尝试过'requery'和'refresh',并且在frmDisclosure打开后尝试关闭frmClient。这些都不起作用。如果我想获得不同的记录,我目前唯一的解决方案是关闭frmDisclosure并重新打开它。

\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Private Sub Command10_Click()
If NumForms > 0 Then
    DoCmd.OpenForm "frmDisclosure"
    Forms!frmDisclosure.FilterOn = False
    DoCmd.OpenForm "frmDisclosure", acNormal, "", "[DiscPK]=" & Me.DiscPK, , acNormal
Else
    DisplayMessage ("No form ref for this application.")
    Exit Sub
End If
End Sub
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Private Sub ComboFind_AfterUpdate()
    Dim rs As Object
    Set rs = Me.RecordsetClone
    rs.FindFirst "[DiscPK] = " & Str(Nz(Me![ComboFind], 0))
    If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ms-access access-vba
1个回答
1
投票

frmDisclosure打开到单个记录,没有其他记录可以导航。 RecordsetClone只有一条记录,所以当然代码不会找到任何其他记录。首先关闭过滤器:

Private Sub ComboFind_AfterUpdate()
    Me.FilterOn = False
    With Me.RecordsetClone
        .FindFirst "[DiscPK] = " & Nz(Me.ComboFind, 0)
        If Not .NoMatch Then Me.Bookmark = .Bookmark
    End With
End Sub

如您所见,不需要声明和设置记录集对象变量。 .EOF可能也会工作,我总是使用NoMatch。这会将焦点设置为记录,而不是过滤表单。

如果您希望显示单个记录,请设置Filter属性。

Private Sub ComboFind_AfterUpdate()
    Me.Filter = "DiscPK=" & Nz(Me.ComboFind, 0)
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.