2010-04-05 8 views
6

Jestem wewnątrz cfloop nad zapytaniem. Chcę uzyskać atrybut, ale nie będę wiedział, jaki będzie ten atrybut do czasu wykonania. Używanie #qryResult[MyAttr]# kończy się niepowodzeniem z błędem "Złożone typy obiektów nie mogą zostać przekonwertowane na proste wartości." Jaka jest to składnia?Jak uzyskać nazwę dynamicznego atrybutu w cfloop przez zapytanie w ColdFusion

Tutaj jest uproszczony przykład:

<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> 

Odpowiedz

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 jest ukryte w dosłownym składni (query.col). Jest on powiązany z indeksem <cfloop query="...">/<cfoutput query="..."> (lub 1, gdy jest używany poza pętlą).

Wymienienie tego jest konieczne w składni "tablicy indeksowej" (query[col][row]), ponieważ sam query[col] zwraca obiekt kolumny (który jest "typem złożonym", do którego odnosi się błąd).

Efekt uboczny: Można go użyć do losowego dostępu do wyniku zapytania poza pętlą (tj. Jako tablicę wielowymiarową). Gdy znasz numery wierszy, które Cię interesują, możesz uzyskać bezpośredni dostęp do wierszy.

+0

to naprawiło, dzięki – Kip

Powiązane problemy