Dynamic 双重计算-如何基于保存列名的变量访问查询列?

Dynamic 双重计算-如何基于保存列名的变量访问查询列?,dynamic,coldfusion,evaluate,Dynamic,Coldfusion,Evaluate,我有一个查询和字段/列名列表。我想对查询中的每条记录执行一种双循环,然后循环遍历字段/列名列表并输出每个对应字段。循环应该是这样的: <table> <cfoutput query="myQuery"> <tr> <cfloop list="#cols#" index="col"> <td>?</td> </cflo

我有一个查询和字段/列名列表。我想对查询中的每条记录执行一种双循环,然后循环遍历字段/列名列表并输出每个对应字段。循环应该是这样的:

<table>
    <cfoutput query="myQuery">
        <tr>
            <cfloop list="#cols#" index="col">
                <td>?</td>
            </cfloop>
        </tr>
    </cfoutput>
</table>

?
问题是把什么放在问号的地方。。。我尝试了
#myquery[col]#
,但没有成功。我需要获取变量
col
中字符串名称指示的变量。。。显然,
#col#
只会返回列名。我需要想办法对字符串进行双重求值。。。像
#######
这样的东西,当然也不会起作用。我怎样才能做到这一点呢?

明白了!!:)


您仍然可以在自己的专栏列表中使用Sergii的方法:

<cfloop list="#cols#" index="col">
   <cfif StructKeyExists(myQuery, col)>
      <td>#col# = #myQuery[col][myQuery.CurrentRow]#</td>
   </cfif>
</cfloop>

#col#=#myQuery[col][myQuery.CurrentRow]#

将列名作为结构引用时,还需要告诉查询要获取哪一行。如果没有通过myQuery.ColumnList获取cols变量,还应该确保检查列名是否存在

使用以下代码动态引用循环中的每一列:

<table>
    <cfoutput query="myQuery">
        <tr>
            <cfloop list="#cols#" index="col">
                <td>#myQuery[col][CurrentRow]#</td>
            </cfloop>
        </tr>
    </cfoutput>
</table>

#myQuery[col][CurrentRow]#

与Sergii的解决方案相同,这将导致“复杂对象类型无法转换为简单值”的错误。换句话说,您缺少行号。我认为
evaluate(DE(“col”)
会更好,但仍应避免evaluate(),除非作为最后手段。哇,这似乎遭到了很多人的反对。我记得听说评估不是最好的方法。。。有人想解释一下吗?每次调用evaluate函数时,它都会强制ColdFusion编译要计算的表达式。对性能不好(编译基本上是单线程的),您几乎总是可以避免它。谢谢,这就是我想要的!嗯,由于某种原因,这会导致评估方法(见下面我的答案)不适用的错误。我得到一个错误,即该表不能被某一列索引,即使该列在错误消息中作为表的一部分列出,我知道它就在那里。当我使用evaluate方法时,它会找到数据。有什么线索可能导致这种情况吗?我注意到它失败的列在第一条记录中是空白的。这就是它失败的原因吗?也许求值会自动将其转换为空字符串?@Al Everett-我不确定,因为查询是在单独的函数中完成的,但我可以检查。这会影响什么吗?如果在使用select*的表中添加/删除列,查询缓存有时会变得很糟糕。您是如何生成“cols”值的?您是否正在使用
queryname.columnList
<table>
    <cfoutput query="myQuery">
        <tr>
            <cfloop list="#cols#" index="col">
                <td>#myQuery[col][CurrentRow]#</td>
            </cfloop>
        </tr>
    </cfoutput>
</table>