【问题标题】:Double evaluation - How do I access my query column based on a variable that holds the column name?双重评估 - 如何根据包含列名的变量访问我的查询列?
【发布时间】:2011-01-26 10:40:18
【问题描述】:

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

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

问题是在问号所在的位置放什么...我试过#myquery[col]#,但这不起作用。我需要在变量col 中获取由字符串名称指示的变量...显然,#col# 只会返回列名。我需要想办法对字符串进行双重评估……比如##col##,当然这也行不通。我怎样才能做到这一点?

【问题讨论】:

    标签: dynamic coldfusion evaluate


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢,这就是我要找的!
    • 嗯。由于某种原因,这导致了评估方法(请参阅下面的答案)不是的错误。我收到一个错误,即该表不能被某个列索引,即使该列在错误消息中列为表的一部分,并且我知道它在那里。当我使用评估方法时,它会找到数据。有什么线索可能导致这种情况吗?
    • 我注意到它失败的列对于第一条记录是空白的。这可能是它失败的原因吗?也许评估会自动将其转换为空字符串?
    • @Al Everett - 我不确定查询是在单独的函数中完成的,但我可以检查一下。这会影响什么吗?
    • 如果您在使用 select * 的表中添加/删除列,查询缓存有时会变得很奇怪。你是如何产生你的“cols”价值的?你在用queryname.columnList吗?
    【解决方案2】:

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

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

    【讨论】:

    • 与 Sergii 的解决方案相同,这会报错“复杂对象类型无法转换为简单值。”
    • 换句话说,您缺少行号。
    【解决方案3】:

    知道了!! :)

    #evaluate(evaluate("col"))#
    

    【讨论】:

    • 我认为evaluate(DE("col")) 会更好,但除非万不得已,否则仍应避免使用 evaluate()。
    • 哇,这似乎遭到了很多反对。我记得听说评估不是最好的方法......有人愿意解释吗?
    • 评估函数强制 ColdFusion 在您每次调用它时编译正在评估的表达式。对性能不利(编译主要是单线程的),您几乎总是可以避免它。
    猜你喜欢
    • 1970-01-01
    • 2016-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    相关资源
    最近更新 更多