我已经创建了一个包含子表单的主表单。使用主窗体上的几个组合框和命令按钮过滤子窗体。
由于某些奇怪的原因,当表单关闭并重新打开时,子表单已经显示为已过滤。
我用来过滤子表单的方法是构建一个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
。
在任何表单或子表单事件上都没有代码运行,所以我有点不知道为什么它会以这种方式运行。任何指针将不胜感激:)