I'm inside a cfloop
over a query. I want to get an attribute, but I won't know what that attribute will be until runtime. Using #qryResult[MyAttr]#
fails with the error "Complex object types cannot be converted to simple values." What is the syntax for doing this?
Here is a simplified example:
<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>
<cfloop query="qryResult">
<cfset MyAttr="autoid" />
<cfoutput>
Test 1: #qryResult.autoid# <br/> <!--- succeeds --->
Test 2: #qryResult[MyAttr][qryResult.CurrentRow]# <br/> <!--- succeeds --->
</cfoutput>
</cfloop>
CurrentRow
is implicit in the literal syntax (query.col
). It is tied to the index of <cfloop query="...">
/<cfoutput query="...">
(or 1 when used outside a loop).
Mentioning it explicitly is necessary in the "array index" syntax (query[col][row]
), because query[col]
alone returns the column object (which is the "complex type" the error refers to).
Side effect: You can use this for random access to a query result outside of a loop (i.e. as a multi-dimensional array). Once you know the numbers of the rows that interest you, you can access the rows directly.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With