2010-04-05 3 views
6

Я внутри cfloop по запросу. Я хочу получить атрибут, но я не буду знать, что этот атрибут будет до выполнения. Сбой #qryResult[MyAttr]# с ошибкой «Сложные типы объектов не могут быть преобразованы в простые значения». Каков синтаксис для этого?Как получить динамическое имя атрибута в cfloop над запросом в ColdFusion

Вот упрощенный пример:

<cfquery datasource="TestSource" name="qryResult"> 
    SELECT * FROM MyTable 
</cfquery> 

<cfloop query="qryResult"> 
    <cfset MyAttr="autoid" /> 
    <cfoutput> 
     Test 1: #qryResult.autoid# <br/> <!--- succeeds ---> 
     Test 2: #qryResult[MyAttr]# <br/> <!--- fails ---> 
    </cfoutput> 
</cfloop> 

ответ

13
<cfloop query="qryResult"> 
    <cfset MyAttr="autoid" /> 
    <cfoutput> 
    Test 1: #qryResult.autoid# <br/> <!--- succeeds ---> 
    Test 2: #qryResult[MyAttr][qryResult.CurrentRow]# <br/> <!--- succeeds ---> 
    </cfoutput> 
</cfloop> 

CurrentRow подразумевается в буквальном синтаксиса (query.col). Он привязан к индексу <cfloop query="...">/<cfoutput query="..."> (или 1 при использовании вне цикла).

Упоминание об этом явно необходимо в синтаксисе «индекс массива» (query[col][row]), поскольку только query[col] возвращает объект столбца (который является «сложным типом», на который указывает ошибка).

Побочный эффект: вы можете использовать это для случайного доступа к результату запроса вне цикла (т. Е. Как многомерный массив). Когда вы знаете номера интересующих вас строк, вы можете напрямую обращаться к строкам.

+0

, который исправил это, спасибо – Kip