2010-04-05 7 views
6

Ich bin innerhalb einer cfloop über eine Abfrage. Ich möchte ein Attribut erhalten, aber ich weiß nicht, was dieses Attribut bis zur Laufzeit sein wird. Die Verwendung von #qryResult[MyAttr]# schlägt mit dem Fehler "Komplexe Objekttypen können nicht in einfache Werte konvertiert werden" fehl. Was ist die Syntax dafür?Wie bekomme ich einen dynamischen Attributnamen in cfloop über Abfrage in ColdFusion

Hier ist ein vereinfachtes Beispiel:

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

Antwort

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 ist implizit in der Literalsyntax (query.col). Er ist an den Index <cfloop query="...">/<cfoutput query="..."> gebunden (oder 1, wenn er außerhalb einer Schleife verwendet wird).

Erwähnen Sie es explizit in der "Array-Index" -Syntax (query[col][row]), weil query[col] allein das Spaltenobjekt zurückgibt (das ist der "komplexe Typ", auf den sich der Fehler bezieht).

Nebeneffekt: Sie können dies für den wahlfreien Zugriff auf ein Abfrageergebnis außerhalb einer Schleife (d. H. Als ein mehrdimensionales Array) verwenden. Sobald Sie die Nummern der Zeilen kennen, die Sie interessieren, können Sie direkt auf die Zeilen zugreifen.

+0

das reparierte es, danke – Kip