2010-04-05 22 views
6

Je suis à l'intérieur d'un cfloop sur une requête. Je veux obtenir un attribut, mais je ne saurai pas quel sera cet attribut avant l'exécution. L'utilisation de #qryResult[MyAttr]# échoue avec l'erreur "Les types d'objets complexes ne peuvent pas être convertis en valeurs simples." Quelle est la syntaxe pour faire cela?Comment obtenir un nom d'attribut dynamique dans cfloop par requête dans ColdFusion

Voici un exemple simplifié:

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

Répondre

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 implicite dans la syntaxe littérale (query.col). Il est lié à l'index <cfloop query="...">/<cfoutput query="..."> (ou 1 lorsqu'il est utilisé en dehors d'une boucle). Le mentionner explicitement est nécessaire dans la syntaxe "array index" (query[col][row]), car query[col] seul renvoie l'objet colonne (qui est le "type complexe" auquel l'erreur fait référence). Effet secondaire: vous pouvez l'utiliser pour un accès aléatoire à un résultat de requête en dehors d'une boucle (c'est-à-dire en tant que tableau multidimensionnel). Une fois que vous connaissez les numéros des lignes qui vous intéressent, vous pouvez accéder directement aux lignes.

+0

qui l'a corrigé, merci – Kip