Я пытаюсь создать функцию для создания CSV-файлов из запросов. После выполнения запроса я перебираю его и добавляю поля каждой строки в объект StringBuffer. С этой целью я помещаю имена столбцов в массив:
<cfset indexes = #ListToArray(Arguments.header)# />
где аргумент в настоящее время является строкой, например:
"col1, col2, col3...."
Я проверил, что и запрос, и массив являются такими, какими они должны быть, путем дампа. Проблема возникает при циклическом просмотре результатов запроса. Данный:
<cfset indexes_length = #ArrayLen(indexes)# />
<cfloop query="query_for_csv">
<cfloop index="i" from="1" to="#indexes_length#">
<cfset attr = #indexes[i]# />
<cfset sbOutput.Append(
"#query_for_csv[attr][query_for_csv.CurrentRow]#") />
</cfloop>
</cfloop>
Выводится только первое значение первой строки, прежде чем я получу сообщение об ошибке:
[Table (rows 10 columns col1, col2, col3):
[col1: coldfusion.sql.QueryColumn@6f731eba]
[col2: coldfusion.sql.QueryColumn@6ee67e7f]
[col3: coldfusion.sql.QueryColumn@5c6647cb]
is not indexable by col2
Если я заменю переменную #attr# литералом "col2":
#query_for_csv['col2'][query_for_csv.CurrentRow]#
затем цикл проходит без проблем и выдает все значения, индексированные 'col2'. Любые идеи?
QueryToCsv
в поисковике, то найдете существующие функции, которые делают именно то, что вам нужно, только они уже написаны и, скорее всего, тоже проверены на наличие ошибок. - person Peter Boughton   schedule 09.11.2011