Цикл запроса Coldfusion не сотрудничает - PullRequest
3 голосов
/ 09 ноября 2011

Я пытаюсь создать функцию для создания 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'. Есть идеи?

Ответы [ 2 ]

4 голосов
/ 09 ноября 2011

Я думаю, проблема в пробелах в вашем списке заголовков, поэтому, вероятно, это сработает:

<cfset attr = trim(indexes[i]) />

Однако, поскольку вы их не используете, вам, вероятно, это не нужно, и вы можете просто сделать это ...

<cfloop query="QueryName">
    <cfloop index="CurCol" list=#QueryName.ColumnList# >
        <cfset sbOutput.Append(
            QueryName[CurCol][QueryName.CurrentRow]
        )/>
    </cfloop>
</cfloop>

ps
Здесь вы заметите, что есть только одна пара хэшей - в ваших исходных фрагментах кода должна быть только одна пара (в атрибуте to) - остальные - ненужный шум.

2 голосов
/ 09 ноября 2011

Как уже было сказано ранее, старайтесь избегать пробелов до или после элемента списка.

Если вы хотите сравнить заметки, проверьте подход, выбранный Беном Наделем для реализации такого конвертера Query2CSV: http://www.bennadel.com/blog/1239-Updated-Converting-A-ColdFusion-Query-To-CSV-Using-QueryToCSV-.htm

...