为什么我的查询没有使用我的标准?

时间:2014-02-17 11:00:12

标签: sql ms-access

我在Access中有一个数据库,我正在尝试运行一个文本框来运行我的查询,并将另一个有界文本框的值作为DLookUp中的条件传递。我在设计视图中运行查询,当我直接输入条件时,它返回正确的结果。当我打开报告时,它会给出所有可能行的总和。换句话说,它不会过滤行。

我大约十二年没有使用Access了,谢天谢地,到目前为止我所做的一切都是教程/示例拼凑,但这里是......

SQL查询:

SELECT Sum(IIf(Attended=-1,1,0)) AS attendance
FROM Students_Classes_Attendance
WHERE (((CStr([Students_Classes_Attendance].[Class_Id]))=[classId]));

DLookUp作为控制源:

=DLookUp("[Total Attendance by Class]![attendance]",
         "[Total Attendance by Class]",
         "[Class_Id] =" & [Class_Id])

此刻我迷路了。我猜测在查询触发之前该值不存在,并且由于条件是一个可选参数,它被传递为null,但我希望你会从中得到一个错误。并非#Error无论如何都非常有意义。

有没有人确切知道这个问题以及纠正它的最佳方法?感谢。

修改
我做了答案中建议的更改,所以现在我的DLookUp看起来像......

=DLookUp("[attendance]",
         "[Total Attendance by Class]",
         "[Class_Id] =" & [Class_Id])

...仍然返回所有行的总数。完全删除标准也没有任何区别,这使我认为它与没有值的绑定文本框有关。

1 个答案:

答案 0 :(得分:4)

DLookup使用以下语法:

  1. 数值的语法:
    DLookup(" FieldName"," TableName"," Criteria = n")

  2. 字符串语法:(注意字符串值前后的单个撇号)
    DLookup(" FieldName"," TableName"," Criteria =' string'")

  3. 日期语法:(注意日期值之前和之后的#) DLookup(" FieldName"," TableName"," Criteria = #date#")

  4. 我相信你只需要从第一个参数中删除表名。试试这个:

    =DLookUp("[attendance]", "[Total Attendance by Class]", "[Class_Id] = " & [Class_Id])
    

    请注意,如果Class_Id是文本字段,则需要用单引号将其括起来:

    =DLookUp("[attendance]", "[Total Attendance by Class]", "[Class_Id] = '" & [Class_Id] & "'")