2010-04-05 18 views
6

Estoy dentro de un cfloop sobre una consulta. Quiero obtener un atributo, pero no sabré qué será ese atributo hasta el tiempo de ejecución. El uso de #qryResult[MyAttr]# falla con el error "Los tipos de objetos complejos no se pueden convertir a valores simples". ¿Cuál es la sintaxis para hacer esto?Cómo obtener un nombre de atributo dinámico en cfloop sobre la consulta en ColdFusion

Aquí es un ejemplo simplificado:

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

Respuesta

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 está implícita en la sintaxis literal (query.col). Está vinculado al índice de <cfloop query="...">/<cfoutput query="..."> (o 1 cuando se usa fuera de un bucle).

Mencionándolo explícitamente es necesario en la sintaxis "índice de matriz" (query[col][row]), porque query[col] solo devuelve el objeto de columna (que es el "tipo complejo" al que hace referencia el error).

Efecto secundario: puede usar esto para acceder aleatoriamente a un resultado de consulta fuera de un bucle (es decir, como una matriz multidimensional). Una vez que sepa los números de las filas que le interesan, puede acceder a las filas directamente.

+0

que lo arregló, gracias – Kip

Cuestiones relacionadas