如何在Alan Brown" ConcatRelated"中使用日期范围

时间:2015-01-31 00:44:54

标签: sql ms-access ms-access-2010

我在日期范围内使用ConcatRelated但无法使其正常工作。我可以使用像a_Date=Date()-1这样的单个日期,没有任何问题。但是,如果我尝试将Date替换为Between并从表单中直接获取日期,则无效。

以下是我的SQL查询示例:

SELECT y.A_date, SUM(y.Absent) AS SumOfAbsent, SUM(y.Tardy) AS SumOfTardy, SUM(y.Vacation) AS SumOfVacation, ConcatRelated(
            'Reason',
            'Absent_Tardy_Vac',
            'A_date=Date()-1',
            'Reason',
            ',  '
        ) AS ConCat_Reasons
FROM Absent_Tardy_Vac AS y
WHERE y.A_date = Date()-1
GROUP BY y.A_date;

该查询效果很好。但是当我尝试使用日期范围时:

SELECT y.A_date, Sum(y.Absent) AS RSumOfAbsent, Sum(y.Tardy) AS RSumOfTardy, Sum(y.Vacation) AS RSumOfVacation, ConcatRelated(
'Reason',
'Absent_Tardy_Vac',
'A_date= Between [Forms]![Date Prompt]![txtBDate] And [Forms]![Date Prompt]![txtEDate]',
'Reason',
',  '
) AS RConCat_Reasons
FROM Absent_Tardy_Vac AS y
WHERE (((y.A_date) Between [Forms]![Date Prompt]![txtBDate] And [Forms]![Date Prompt]![txtEDate]))
GROUP BY y.A_date;

我收到错误

  

错误3075:表达式中的语法错误(缺少运算符)。 'A_date   在[表格]之间![日期提示]![txtBDate]和[表格]![日期   提示]![txtEDate]'

这适用于我没有使用ConcatRelated的所有其他查询。 txtBDatetxtEDate是我用于将开始日期和结束日期传递给针对一个报告运行的多个查询的表单中的字段。

1 个答案:

答案 0 :(得分:1)

db引擎可以解析主查询的WHERE子句中对这些文本框的引用。但是,ConcatRelated表达式中的相同引用未解析,Access将它们解释为参数。

解决方案是在ConcatRelated strWhere 参数(第三个参数)中包含这些文本框的值,而不是文本框名称。

ConcatRelated(
    'Reason',
    'Absent_Tardy_Vac',
    'A_date Between '
        & Format([Forms]![Date Prompt]![txtBDate], '\#yyyy-m-d\#')
        & ' And '
        & Format([Forms]![Date Prompt]![txtEDate], '\#yyyy-m-d\#'),
    'Reason',
    ', '
    ) AS RConCat_Reasons