Domanda

Sono all'interno di una cfloop su una query. Voglio ottenere un attributo, ma io non so che cosa attributo sarà fino al runtime. Uso #qryResult[MyAttr]# con l'errore "tipi di oggetti complessi non possono essere convertiti in valori semplici." Qual è la sintassi per fare questo?

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>
È stato utile?

Soluzione

<cfloop query="qryResult">
  <cfset MyAttr="autoid" />
  <cfoutput>
   Test 1: #qryResult.autoid# <br/>  <!--- succeeds --->
   Test 2: #qryResult[MyAttr][qryResult.CurrentRow]# <br/> <!--- succeeds --->
  </cfoutput>
</cfloop>

CurrentRow è implicita nella sintassi letterale (query.col). È legata all'indice di <cfloop query="..."> / <cfoutput query="..."> (o 1 quando usato fuori di un ciclo).

Citando esplicitamente è necessaria la sintassi "array di indici" (query[col][row]), perché query[col] solo restituisce l'oggetto colonna (che è il "tipo complesso" l'errore si riferisce a).

Effetto secondario: È possibile utilizzare questo per l'accesso casuale ad un risultato di query fuori di un ciclo (cioè come un array multi-dimensionale). Una volta che si conoscono i numeri delle righe che ti interessano, è possibile accedere direttamente alle righe.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top