首页 > 解决方案 > 在基于表单字段的 MS Access 查询中选择 TOP x?

问题描述

我有一个 Access 报告,它Record Source引用了表单上的几个字段。它工作正常。就是这样,SELECT为简单起见,减去子句中的一堆字段:

SELECT
    pt.PA,
    pt.SpfCode
FROM
    PtHead AS pt
    LEFT JOIN tblProblems AS p ON pt.PA = p.PantagNo
WHERE
    pt.PA = [Forms]![fdlgQualityHistory]![PA] AND
    p.ComplaintDate >= [Forms]![fdlgQualityHistory]![StartDate];

我想升级这个报告,使它只显示最新的记录。这工作正常:

SELECT TOP 20  -- NEW PART
    pt.PA,
    pt.SpfCode
FROM
    PtHead AS pt
    LEFT JOIN tblProblems AS p ON pt.PA = p.PantagNo
WHERE
    pt.PA = [Forms]![fdlgQualityHistory]![PA] AND
    p.ComplaintDate >= [Forms]![fdlgQualityHistory]![StartDate]
ORDER BY p.ComplaintDate DESC;  -- NEW PART

但是,我不希望它被硬编码为TOP 20. 我希望它是TOP x,基于同一表单上的另一个字段。以下失败:

SELECT TOP [Forms]![fdlgQualityHistory]![MaxProblems]  -- FAILS HERE
    pt.PA,
    pt.SpfCode
FROM
    PtHead AS pt
    LEFT JOIN tblProblems AS p ON pt.PA = p.PantagNo
WHERE
    pt.PA = [Forms]![fdlgQualityHistory]![PA] AND
    p.ComplaintDate >= [Forms]![fdlgQualityHistory]![StartDate]
ORDER BY p.ComplaintDate DESC;

错误:

SELECT 语句包含拼写错误或丢失的保留字或参数名称,或者标点符号不正确。

我可以更改语法以使其正常工作吗?如果没有,我该怎么办?每次通过 VBA 运行报告时,我是否必须覆盖整个查询文本?

标签: sqlms-accessvba

解决方案


Access 不支持对 SELECT TOP 使用参数。

在该控件 的更新后事件中修改记录源SQL 。[Forms]![fdlgQualityHistory]![MaxProblems]


推荐阅读