2010-04-05 12 views
6

Sono all'interno di un cfloop su una query. Voglio ottenere un attributo, ma non saprò quale sarà l'attributo fino al runtime. L'utilizzo di #qryResult[MyAttr]# non riesce con l'errore "Impossibile convertire i tipi di oggetti complessi in valori semplici". Qual è la sintassi per fare questo?Come ottenere un nome di attributo dinamico in cfloop su query in ColdFusion

Ecco un esempio semplificato:

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

risposta

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 è implicito nella sintassi letterale (query.col). È legato all'indice di <cfloop query="...">/<cfoutput query="..."> (o 1 se utilizzato al di fuori di un ciclo).

Citando esplicitamente è necessario nel "indice di matrice" sintassi (query[col][row]), perché query[col] solo restituisce l'oggetto colonna (che è il "tipo complesso" l'errore si riferisce).

Effetto collaterale: è possibile utilizzarlo per l'accesso casuale a un risultato della query all'esterno di un ciclo (vale a dire come matrice multidimensionale). Una volta che conosci i numeri delle righe che ti interessano, puoi accedere direttamente alle righe.

+0

che lo ha risolto, grazie – Kip

Problemi correlati