Sql 为什么我的查询不使用我的条件?

Sql 为什么我的查询不使用我的条件?,sql,ms-access,Sql,Ms Access,我在Access中有一个db,我正在尝试获取一个textbox来运行我的查询,并将另一个有界textbox的值作为DLookUp中的条件传入。我在设计视图中运行查询,当我直接输入条件时,它会返回正确的结果。当我打开报告时,它会给出所有可能行的总和。换句话说,它不过滤行 谢天谢地,我已经有12年没有使用Access了,到目前为止,我所做的一切都是教程/示例补丁,但这里是 SQL查询: SELECT Sum(IIf(Attended=-1,1,0)) AS attendance FROM Stude

我在Access中有一个db,我正在尝试获取一个textbox来运行我的查询,并将另一个有界textbox的值作为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,但我希望您从中得到一个错误。无论如何,这个错误不是很有意义

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

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


…仍然返回所有行的总数。完全删除标准也没有什么区别,这让我觉得这与绑定的文本框没有值有关。

DLookup使用以下语法:

数值的语法: DLookupFieldName,TableName,Criteria=n

字符串语法:注意字符串值前后的单撇号 DLookupFieldName,TableName,Criteria='string'

日期语法:注意日期值的前后 DLookupFieldName,表名,条件=日期

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

=DLookUp("[attendance]", "[Total Attendance by Class]", "[Class_Id] = " & [Class_Id])
请记住,如果Class_Id是一个文本字段,则需要用单引号将其括起来:

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

DLookup使用以下语法:

数值的语法: DLookupFieldName,TableName,Criteria=n

字符串语法:注意字符串值前后的单撇号 DLookupFieldName,TableName,Criteria='string'

日期语法:注意日期值的前后 DLookupFieldName,表名,条件=日期

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

=DLookUp("[attendance]", "[Total Attendance by Class]", "[Class_Id] = " & [Class_Id])
请记住,如果Class_Id是一个文本字段,则需要用单引号将其括起来:

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

谢谢,不幸的是,它没有改变报告。我不需要表名是有道理的,因为查询设计知道它。因此,您不认为这可能与它从表中加载的条件所获取的文本框有关,在调用查询时,该文本框可能不存在?如果我一起删除条件部分,则报告是相同的。在DLookUp语句之前插入一个MsgBox,类ID为&[Class_ID]&并查看它认为该变量是什么。我希望我的机器能够克服我的挫折。现在,即使我直接从Access复制/粘贴帖子中的内容,也会导致错误。查询仍然可以直接正常工作,但不在报表中。当我尝试添加你的小贴士时,它说没有操作数的-可能运算符有语法错误。我对你的确切过程有点困惑,所以让我问一下:在打开报告之前,你是否或你是否可以将文本框的值传递到你的查询中?如果它是一个静态查询,除了这个报告之外,您可以考虑将过滤器建立在查询中。要做到这一点,当您在设计视图中打开文本框时,您需要将文本框的值放入查询中的条件行中。只需输入类似于[Forms]的内容![MyForm][MyTextbox]并且它将根据文本框中的内容进行过滤。感谢您一直支持我;就是这样。谢谢,不幸的是,它没有改变报告。我不需要表名是有道理的,因为查询设计知道它。因此,您不认为这可能与它从表中加载的条件所获取的文本框有关,在调用查询时,该文本框可能不存在?如果我一起删除条件部分,则报告是相同的。在DLookUp语句之前插入一个MsgBox,类ID为&[Class_ID]&并查看它认为该变量是什么。我希望我的机器能够克服我的挫折。现在,即使我直接从Access复制/粘贴帖子中的内容,也会导致错误。查询仍然可以直接正常工作,但不在报表中。当我尝试添加你的小贴士时,它说没有操作数的-可能运算符有语法错误。我对你的确切过程有点困惑,所以让我问一下:在打开报告之前,你是否或你是否可以将文本框的值传递到你的查询中?如果它是一个静态查询,除了这个报告之外,您可以考虑将过滤器建立在查询中。要做到这一点,当您在设计视图中打开文本框时,您需要将文本框的值放入查询中的条件行中。只是放一些东西,比如[
表格]![MyForm][MyTextbox]并且它将根据文本框中的内容进行过滤。感谢您一直支持我;就这样。