Отчет о доступе # Текстовое сообщение об ошибке

Я пытаюсь создать сводный отчет в Access с некоторой настраиваемой статистикой на основе ежедневного запроса. Однако я сталкиваюсь с некоторыми трудностями. Когда я использую отчет, построенный на основе указанного запроса, я получаю одно и то же точное число независимо от формулы.

Я создаю формулу для подсчета текстовых значений в поле или подсчета всех ответов в поле, но формула всегда будет возвращать 18 в качестве значения (общее количество записей), даже если я знаю, что это неверно для формулы. В качестве альтернативы я создам пустой отчет, и независимо от того, что я сделаю, я получу #Error или #Name? значение в текстовом поле. Я проверил, и имя из элемента управления не является именем в формуле или где-либо еще - я обычно переименовываю его в Text0 или Demo.

Формула, которую я пытался использовать,

=Count(IIf([Daily_Numbers_Query].[Signed_Card] Is Not Null,1,0));

Где Daily_Numbers_Query относится к запросу, а Signed_Card относится к полю, которое я хочу изучить из этого запроса. Я хочу, чтобы он сообщал мне количество записей, для которых Signed_Card имеет значение и не равно нулю.

Любая помощь будет очень признательна.


person Sean Reilly Wood    schedule 25.07.2017    source источник


Ответы (2)


Вы сказали, что запрос находится в RecordSource отчета, тогда просто нужно использовать правильный ложный возврат. Кроме того, вероятно, не нужен префикс имени запроса.

=Count(IIf([Signed_Card] Is Not Null, 1, Null))

or

=Count(IIf(Not IsNull([Signed_Card]), 1, Null))

or

=Sum(IIf([Signed_Card] Is Not Null, 1, 0))

person June7    schedule 25.07.2017
comment
Работает как шарм, спасибо! Я потратил около 12 часов на этой неделе, ломая голову над этим - не могу поверить, что это было так просто. - person Sean Reilly Wood; 26.07.2017

Count — это агрегатная функция в SQL, но ее нельзя использовать непосредственно в выражении.

Для этого вы используете функции домена: DCount, DSum, ...

В этом случае проще всего:

=DCount("*", "Daily_Numbers_Query", "[Signed_Card] Is Not Null")

Если вы хотите использовать IIf, вам придется использовать DSum:

=DSum(IIf([Daily_Numbers_Query].[Signed_Card] Is Not Null,1,0))
person Andre    schedule 25.07.2017
comment
Агрегатные функции SQL возможны в выражении. Предлагаемый DSum не является правильным синтаксисом. - person June7; 25.07.2017