¿Es posible tener nombres de consulta generados dinámicamente en ColdFusion?
coldfusion-9 cfquery (2)
No hay necesidad de usar evaluate()
para hacer esto, y uno no debería (así que he votado negativamente esa respuesta, lo siento).
Todo lo que necesita hacer es usar notación de matriz asociativa:
<cfdump var="#local[qname]#">
Si uno quiere acceder a una columna de esa consulta, es:
#local[qname][columnName]#
Y para una celda específica:
#local[qname][columnName][rowNumber]#
Hay muy pocas situaciones en las que evaluate()
es la respuesta correcta a cualquier cosa. No se puede confiar en los documentos de Adobe porque, desafortunadamente, muchos de los desarrolladores de ColdFusion no los escribieron mucho.
Lo que intento hacer es
<cfloop array="#LOCAL.someArray" index="LOCAL.aString">
<cfset LOCAL.queryName = "uniqueQueryName_" & LOCAL.aString />
<cfquery name="#LOCAL.queryName#" datasource="db" cachedwithin="#CreateTimeSpan(1,0,0,0)#">
SELECT count(*) AS c FROM someTable
</cfquery>
<cfdump var="#LOCAL.queryName#" />
</cfloop>
¿Es esto posible, o hay una mejor manera de hacerlo?
Editar
Esto funciona con <cfloop query="LOCAL.queryName">
pero no cuando intento hacer <cfset ArrayAppend(LOCAL.returnArray, LOCAL.queryName.c) />
Puedes volcar la consulta, e imagino también acceder haciendo algo como esto:
<cfloop list="q1,q2,q3" index="qname">
<cfquery name="#qname#" datasource="dsn">
SELECT * from some_table;
</cfquery>
<cfdump var="#Evaluate(''#qname#'')#" />
</cfloop>
La función Evaluar es lo que le permite hacer lo que desea.