У меня ошибка при циклическом выполнении запроса с использованием cfloop
.
Когда я использую cfdump
в запросе (заметьте, внутри цикла), я прекрасно вижу все данные. Но когда я пытаюсь получить значение каждой переменной, как вы обычно это делаете в cfloop
, я получаю сообщение о том, что они не определены. Затем я изменил каждую переменную, чтобы она ссылалась конкретно на запрос, и теперь проблема в том, что переменная не определена в запросе. Вот код:
<cffunction name="writeCourses">
<cfargument name="recordset" required="yes" type="query">
<cfif recordset.RecordCount NEQ 0>
<cfset temp = "">
<cfoutput>
<cfloop query="recordset">
<!--- <cfdump var="#recordset#"> <cfabort/> --->
<cfset temp = temp & "<strong>#recordset.courseType# #recordset.courseNum# ">
<cfif isDefined("recordset.courseTHM") AND recordset.courseTHM EQ 1>
<cfset temp = temp & "(#left(recordset.courseNum,3)#4) ">
</cfif>
<cfif isDefined("recordset.courseName")>
<cfset temp = temp & "#recordset.courseName# </strong><br>">
</cfif>
<cfset temp = temp & "#recordset.courseDESC#<br>">
<cfset temp = temp & "#recordset.courseHours#<br><br>">
</cfloop>
</cfoutput>
<cfelse>
<cfset temp = "">
</cfif>
<cfreturn temp>
</cffunction>
Как видите, каждая переменная заключена в теги ##
. Первоначально ни один из них не был обработан recordset.
, но они все еще не были определены. И когда я раскомментирую теги cfdump
и cfabort
, они работают нормально, и я вижу запрос recordset
со всеми данными, как и должно быть.
Каждый раз, когда я использовал cfloop
с запросом, он работал, как и ожидалось. Кроме того, я не писал этот код, мне приходится его модифицировать (первоначальный автор здесь больше не работает).
Вот пример дампа recordset
:
Сообщение об ошибке:
Сведения: [пустая строка]
ErrNumber: 0
Сообщение: Элемент COURSETTYPE не определен в RECORDSET.
Разрешенное имя: RECORDSET
Строка ошибки:
<cfset temp = temp & "<strong>#recordset.courseType# #recordset.courseNum# ">
<cfif isDefined("recordset.courseTHM") AND recordset.courseTHM EQ 1>
<cfset temp = temp & "(#left(recordset.courseNum,3)#4) ">
</cfif>
<cfif isDefined("recordset.courseName")>
<cfset temp = temp & "#recordset.courseName# </strong><br>">
</cfif>
Это все одна строка :/
Хранимая процедура/функция, вызывающая вышеуказанное:
<cffunction name="getCoursesByDept">
<cfargument name="deptCode" required="yes" type="string">
<CFSTOREDPROC procedure="dbo.GetCourses" datasource="WebCatalog">
<CFPROCPARAM type="IN" dbvarname="@deptCode" value="#deptCode#" cfsqltype="CF_SQL_CHAR">
<CFPROCRESULT name="result">
</CFSTOREDPROC>
<cfinvoke method="writeCourses" recordset="#result#" returnvariable="output">
<cfreturn output>
</cffunction>
<cfdump>
(или хотя бы его часть, показывающую набор записей)? - person Miguel-F   schedule 16.04.2013#courseType
вместо#recordset.courseType#
, я просто получаю сообщение о том, что COURSETYPE не определен. - person mAlenius   schedule 17.04.2013temp
было определено где-то ранее. Возможно, с<cfparam name="temp" default="">
или<cfset temp = "">
? - person Chester   schedule 17.04.2013coursetype
, с идентификатором CF_DOTRESOLVER Редактировать: Честер, да, в строке перед<cfoutput>
есть<cfset temp = "">
- person mAlenius   schedule 17.04.2013recordset.
для ваших переменных. Не могли бы вы также показать нам свой<cfquery>
, определяющий набор записей? - person Miguel-F   schedule 17.04.2013recordset
, переменные все еще не определены. Итак, вы предлагаете мне проверять нулевые значения (на случай, если первый проход будет прослушиваться)? - person mAlenius   schedule 17.04.2013<cfquery>
кодом, определяющим набор записей? - person Miguel-F   schedule 17.04.2013cfinvoke
, который вызывает метод, содержащий приведенный выше код, и кажется, чтоrecordset
проходит нормально. На самом деле не хочу публиковать всю хранимую процедуру, но в основном она вытягивает строки, где тип равен переданному параметру (строка). - person mAlenius   schedule 17.04.2013cfinvoke
? - person Leigh   schedule 17.04.2013<cfset>
, значит, что-то не опубликовано, что идет не так. - person Matt Busche   schedule 17.04.2013<cfargument>
вы можете сделать<cfset var recordset = arguments.recordset>
- person Matt Busche   schedule 17.04.2013result
,output
,temp
и так далее. Отсутствие области видимостиvar
может создать проблемы даже на одной странице, если вы повторно используете имена переменных. - person Leigh   schedule 17.04.2013