У меня есть база данных Access для рабочего проекта, к сожалению, я не могу поделиться слишком многими подробностями из-за характера работы. Но в основном у меня есть таблицы действий, которые необходимо выполнить, каждое действие имеет дату выполнения, и у меня есть таблица, в которой подсчитывается, сколько действий должно быть выполнено и было выполнено в каждом месяце, используя следующую логику:
Group by Month([Due Date])
Count [Due Date]
Для одного запроса и то же самое для завершенных дат в другом запросе. Затем у меня есть окончательный запрос, который использует запрос о датах выполнения, запрос о завершенных датах и таблицу месяцев года (иначе пустые месяцы не отображаются). Итак, у меня есть следующее:
Nz(Due Dates Totals.Count,0)
Nz(Completed Dates Totals.Count,0)
Calendar.Month Number
Calendar.Month Name
(Значок Nz
' выше нужен для того, чтобы в моем отчете не было пустых мест)
Затем мой отчет использует номер месяца для сортировки и группировки, название месяца для отображения месяца пользователям и небольшую таблицу с запланированными действиями и общим количеством действий. Затем я применяю условное форматирование к таблице, так что если выполненных действий меньше запланированных, она выделяется красным, если они равны, то зеленым, а если выполненных действий больше запланированных, то поле «завершено» становится синим.
Это работает нормально, если только одно из чисел не является двузначным числом. В этом случае сравнивается только первая цифра каждого значения, например:19 < 2
Я попробовал сравнить значение в поле с подсчетом из самого запроса и сравнить его со значением в поле в отчете, и у них обоих одна и та же проблема. Я предполагаю, что он сравнивает их как строки, а не числа, но я не знаю, как заставить запрос сохранить количество как число.
Спасибо за любую помощь. (И, кстати, в базе данных есть еще таблицы и тому подобное, Excel не является подходящим инструментом для этой работы).
решение1
Если MS Access интерпретирует числовое значение как строку, вы можете привести строковое значение к числовому типу данных, используя один из следующих методов:функции преобразования типов, выбор которого, очевидно, будет зависеть от характера ваших данных:
CCur
(в валюту)CDbl
(удвоить)CDec
(в десятичную систему)CInt
(в целое число)CLng
(к Лонгу)CSng
(для сингла)
Поскольку вы собираетесь работать с целыми числами, я бы посоветовал использовать либо CInt
, либо , если ваши значения, скорее всего, превысят 32767 (2 15 -1), CLng
.
Таким образом, ваш код может стать следующим:
CInt(Nz([Due Dates Totals].Count,0))
CInt(Nz([Completed Dates Totals].Count,0))
Calendar.[Month Number]
Calendar.[Month Name]
решение2
Нашел решение, умножил Nz()
функции на 1
и теперь они должны быть числами, а не строками.
например, вместо
Nz(Due Dates Totals.Count,0)
я использовал
1 * Nz(Due Dates Totals.Count,0)