我在Access 2010中有一个引用查询的子。它们应该通过三列并找到最低的一列。当我运行它时,我收到一个错误:“您作为查询参数输入的表达式产生了此错误:'Projects.ProjectID'
子:
Private Sub UpdatePriority_Click()
Overall_Priority = DMin("MinvonGeoPri", "qryOverallPriority", "Projects.ProjectId=1")
End Sub
查询:
SELECT
Min(Projects.GeoPavePri) AS MinvonGeoPri
, Min(Projects.StrPri) AS MinvonStrPri
, Min(Projects.SOPri) AS MinvonSOPri
, Projects.ProjectId
FROM
Projects
WHERE
Projects.ProjNo=Activity.ProjNo;
Google建议我在1左右添加引号,因此我将其更改为"Projects.ProjectID=" & 1 & ""
,但它没有帮助。我已经仔细检查过拼写,字段名称,而且我的想法已经用完了。任何建议都会很棒。
答案 0 :(得分:1)
从select语句创建qryOverallPriority
后,引用Projects.[ProjectId]
字段只是[ProjectId]
。简而言之,您失去了引用父表的能力,尽管它可以被引用为qryOverallPriority.[ProjectId]
,但这不是必需的。
Private Sub UpdatePriority_Click()
Overall_Priority = DMin("MinvonGeoPri", "qryOverallPriority", "ProjectId=1")
End Sub
由保存的查询提取的任何字段都由该保存查询查看它的方式引用,而不是由构成已保存查询的基础SQL select语句引用。同样,别名字段将由其别名引用;例如[ProjectId]和[ProjectId2],用于连接中的[ProjectId]字段。
您还在使用不带MIN
子句的聚合GROUP BY
函数。使用Access前端确保您获得所需的结果。也许是这样的,
SELECT
Min(p.GeoPavePri) AS MinvonGeoPri
,Min(p.StrPri) AS MinvonStrPri
,Min(p.SOPri) AS MinvonSOPri
,p.ProjectId
FROM
Projects p
WHERE
p.ProjNo=Activity.ProjNo;
GROUP BY p.GeoPavePri, p.StrPri, p.SOPri, p.ProjectId
你应该可以使用,
Overall_Priority = DLookup("MinvonGeoPri", "qryOverallPriority", "ProjectId=1")
这是未经测试的。我没有构建完整的测试环境,我不知道Activity.ProjNo
来自哪里。