【问题标题】:Why doesn't my query use my criteria?为什么我的查询不使用我的条件?
【发布时间】:2014-02-18 03:54:53
【问题描述】:

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

我已经有大约 12 年没有使用 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])

...仍然返回所有行的总数。完全删除条件也没有什么区别,这让我认为它与没有值的绑定文本框有关。

【问题讨论】:

    标签: sql ms-access


    【解决方案1】:

    DLookup 使用以下语法:

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

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

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

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

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

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

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

    【讨论】:

    • 谢谢,很遗憾它没有改变报告。我不需要表名是有道理的,因为查询设计知道它。所以你不认为它可能是它获取标准的文本框的问题,它是从表中加载的,当查询被调用时可能不存在?如果我一起删除标准部分,报告是相同的。
    • 在 DLookUp 语句之前插入一个 MsgBox "The Class ID is " & [Class_Id] & "",看看它认为该变量是什么。
    • 我希望我的机器能克服我的挫败感。现在,即使我复制/粘贴了我直接从 Access 复制的帖子的工作内容,也会导致#Error。查询仍然可以直接正常工作,但不能在报告中。当我尝试添加您的花絮时,它说 - 可能没有操作数的运算符存在语法错误。
    • 我对你的具体过程有点困惑,所以让我问一下:你(或者你能不能)将文本框的值传递给你的查询before你打开报告?如果它是只用于此报告的静态查询,您可以考虑将过滤器直接构建到查询中。为此,您可以将文本框的值放入查询中的 Criteria 行中(当您在设计视图中打开它时)。只需输入类似 [Forms]![MyForm].[MyTextbox] 的内容,它就会根据文本框中的内容进行过滤。
    • 感谢您的陪伴;就是这样。
    猜你喜欢
    • 2021-11-12
    • 2020-01-07
    • 2017-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    相关资源
    最近更新 更多