在某些情况下,无法通过组合框移至另一条记录

时间:2019-03-22 20:06:16

标签: ms-access access-vba

我有两种形式:“ 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
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

1 个答案:

答案 0 :(得分: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