使用先前过滤器打开子窗体

时间:2015-11-19 16:22:28

标签: ms-access access-vba

我已经创建了一个包含子表单的主表单。使用主窗体上的几个组合框和命令按钮过滤子窗体。

由于某些奇怪的原因,当表单关闭并重新打开时,子表单已经显示为已过滤。

我用来过滤子表单的方法是构建一个sql字符串,当按下命令按钮应用过滤器时,该字符串将用作子表单的记录源。

这是构建sql string的函数:

Public Function strSfaPaymentRecordSource() As String

    strSfaPaymentRecordSource = "SELECT " _
                              & "[tblSfaRemittances].ID, [tblSfaRemittances].[SfaBudget], " _
                              & "[tblSfaRemittances].[PfrFundingLine], [tblSfaRemittances].[ContractNo], " _
                              & "[tblSfaRemittances].[LedgerDesc], [tblSfaRemittances].[TransDesc], " _
                              & "[tblSfaRemittances].[Period], [tblSfaRemittances].[Amount], [tblSfaRemittances].[Memo] " _
                              & "FROM tblSfaRemittances"

    If Me.cboFundingLine > "" Or Me.cboReturnPeriod > "" Then       
        strSfaPaymentRecordSource = strSfaPaymentRecordSource & " WHERE"        
    End If

    If Me.cboFundingLine > "" Then      
        strSfaPaymentRecordSource = strSfaPaymentRecordSource & " PfrFundingLine = '" & Me.cboFundingLine & "' And"         
    End If

    If Me.cboReturnPeriod > "" Then     
        strSfaPaymentRecordSource = strSfaPaymentRecordSource & " Period = '" & Me.cboReturnPeriod & "'"            
    End If

    If Right(strSfaPaymentRecordSource, 4) = " And" Then
        strSfaPaymentRecordSource = Left(strSfaPaymentRecordSource, Len(strSfaPaymentRecordSource) - 4)
    End If

End Function

然后命令按钮将子表单记录源分配给上面的字符串函数:

Private Sub CmdApplyFilter_Click()

    Me.frmSfaRemittances_sub.Form.RecordSource = strSfaPaymentRecordSource

End Sub

现在,每当我打开表单时,子表单都已经以相同的方式过滤(即使我以另一种方式过滤它,关闭表单并返回它)。

我检查了子表单的记录源,并且没有保存WHERE子句。当表单和子表单打开并且仍然没有应用Debug.Print子句时,我还在子表单记录源上运行WHERE

在任何表单或子表单事件上都没有代码运行,所以我有点不知道为什么它会以这种方式运行。任何指针将不胜感激:)

0 个答案:

没有答案