Короткий ответ:
Если вам просто нужно вычислить сумму, идти с предложением Дэна использования одного запроса, с базовой SUM() агрегата. Я расскажу Дэн, но это будет более эффективно, чем запрос в цикле.
Более длинный ответ:
Просто для решения исходной ошибки, это хороший пример того, почему обзорных переменных является хорошей практикой. Отсутствие обзора - вот что привело к фатальной ошибке. Тем не менее, это может так же легко вызвать логические ошибки, которые не так легко заметить.
Инициализация переменной total
без рамки, означает, что она заканчивается по умолчанию variables
scope. Таким образом, вы, по сути это сделать:
<cfset variables.total = 0>
При перебрать внешнего запроса, данные в текущей строке получает присваиваются переменным, но в другой области: в (псевдо) запрос объем. Так как один из столбцов запроса происходит, чтобы быть названным total
, петля неосторожно создает вторую total
переменную, которая вызывает все идет в сторону, когда вы пытаетесь вычислить сумму здесь:
<cfset total = #st.hrs# + total>
Поскольку переменная total
не ограничена, CF должен угадать, какая из двух она должна использовать, и в этом случае догадывается неправильно.
Переменные без области действия - evaluated according to these rules, которые придают области запроса более высокий приоритет, чем variables
. В результате CF использует значение bl.total
вместо variables.total
. Поскольку bl.total
равно нулю (или пустая строка), что приводит к тому, «значение„“не может быть преобразован в номер ошибки. Задание переменной сферы, т.е. variables.total
, предотвратит эту ошибку.
Опять же, лучше способы просто вычислить сумму.Однако, когда вам действительно нужен цикл запроса, не забудьте охватить все переменные, чтобы избежать возможных конфликтов.
В базе данных, которая имеет нулевые значения в общем поле для некоторых записей, ColdFusion преобразует эти для пустых строк. Есть ли причина, по которой вы не используете функцию sum() sql, чтобы получить ответ? –
Нулевые значения Я думал, что удалил с помощью записи.Можете ли вы рассказать о сумме()? –
RecordCount просто сообщает вам, содержит ли запрос какие-либо записи. Он ничего не сообщает о значениях столбца в этих записях. Вы должны проверить отдельные значения. Dan предлагает вам использовать совокупный SUM для вычисления общей суммы в одном запросе вместо запроса в цикле. Вам нужно будет опубликовать SQL для запроса bl для специфики. – Leigh