MSAccess VBA,通过组合框过滤查询结果(文本)

时间:2018-03-12 16:16:16

标签: ms-access access-vba

我想基于comboBox文本值过滤查询中的日期值(文本)。 这就是我所拥有的:

ComboBoxTimePeriod(ID [num],TimePeriod [text])。

在ComboBox中,我选择时间段,例如" 16.10.2017-15.11.2017"。

在查询中,我的日期字段包含单个日期,例如" 20.10.2017" (文本)。

我想要的是编写一个SQL代码,搜索日期在TimePeriod范围内的所有记录。

到目前为止,想法是从TimePeriod中提取SatrtDate和EndDate,如下所示:

    Dim strStartDate As String
    Dim strEndDate As String

    strStartDate = Mid(Me.cboTimePeriod.Text, 1, 10)
    strEndDate = Mid(Me.cboTimePeriod.Text, 12, 10)

现在来自TimePeriod" 16.10.2017-15.11.2017"我有StartDate(16.10.2017)和EndDate(15.11.2017)。

我想过滤所有在这两个日期内有日期的记录。 这就是我需要你们的地方。

请注意,这与我上一个问题不同,我在那里搜索了TimePeriodID(Subform filtering based off multiple parameters (Combobox AND Textbox))的记录。

1 个答案:

答案 0 :(得分:1)

始终将日期作为日期处理,而不是文本:

Dim StartDate As Date
Dim EndDate As Date
StartDate = DateValue(Split(Me.cboTimePeriod.Value, "-")(0))
EndDate = DateValue(Split(Me.cboTimePeriod.Value, "-")(1))

构建过滤器:

... " Between #" & Format(StartDate, "yyyy\/mm\/dd") & "# And #" & Format(EbdDate, "yyyy\/mm\/dd") & "#"

过滤表单:

Me.Filter = "[Date Field] Between #" & Format(StartDate, "yyyy\/mm\/dd") & "# And #" & Format(EbdDate, "yyyy\/mm\/dd") & "#"
Me.FilterOn = True

确保您的日期字段的数据类型为日期,而不是文字。