编写一个代码来从Access中的子表单中过滤数据(使用表单中的组合框)

时间:2016-05-17 18:38:14

标签: vba datetime combobox access

好的,这是我的情景: 我有一个带有子表单的表单,在msAccess2013中这个子表有一个表,我想用组合框中的列表过滤行,这样子表单根据组合框的选择向我显示记录,组合框数据type是一个日期,它也是一个级联组合框(它将显示数据而不管另一个组合框),所以最后我将过滤在子表格中只有该特定日期的记录。

好的,这是我的代码:

    Private Sub cbSelectDate_AfterUpdate()
    Dim AT As Date
    AT = "select * from subform where ([AppointDate] = # & Me.cbSelectDate &                 "#')"
    Me.subform.Form.RecordSource = AT

    Me.subform.Form.Requery

    End Sub

vb并不完全接受我的代码它说"编译错误:预期:结束语句"请帮助??

3 个答案:

答案 0 :(得分:0)

因为第三线"结束字符串和' #')" '将是字符串 所以把""而不是"  AT ="从子表格中选择*([AppointDate] =#& Me.cbSelectDate&""#')"

答案 1 :(得分:0)

Me.cbSelectDate是代码中字符串的一部分,尝试类似:

"select * from ..." & Me.cbSelectDate & "...end stuff"

答案 2 :(得分:0)

您将子表单记录源设置为日期...这不起作用。您可以使用几种不同的方法。像你的例子中的SQL就是其中之一。但在这种情况下,我可能只是在您的子表单记录源上应用过滤器。这是未经测试的,但它应该接近你想要的。我唯一记不住的是,如果在表单过滤器中使用了Pounds(#),我知道它们在Access SQL和Expressions中被起诉,但表单过滤器有时会有所不同。

Private Sub cbSelectDate_AfterUpdate()
    Dim strFilter As String
    Dim rst As DAO.Recordset

    ' Clone The Current Subform's Recordset
    Set rst = Me.SubForm.Form.RecordsetClone

    ' Get the Current Filter If One Has Already Been Applied to the Subform
    If Me.SubForm.Form.FilterOn Then strFilter = Me.SubForm.Form.Filter

    If Not rst.EOF Then
        If strFilter > "" Then
            strFilter = strFilter & " AND [AppointDate] = #" & Me.cbSelectDate & "#"
        Else
            strFilter = "[AppointDate] = #" & Me.cbSelectDate & "#"
        End If
        Me.SubForm.Form.Filter = strFilter
        Me.SubForm.Form.FilterOn = True
    End If
    Set rst = Nothing
    Me.SubForm.Form.Requery
End Sub