【问题标题】:Getting complex object error when trying to output query values尝试输出查询值时出现复杂对象错误
【发布时间】:2012-03-08 23:01:29
【问题描述】:

我的目标是只输出“fieldList”中指定的列数据。

得到以下错误:

复杂对象类型不能转换为简单值。表达式请求了一个变量或一个中间表达式结果作为一个简单值,但是,结果不能转换为一个简单值。简单值是字符串、数字、布尔值和日期/时间值。查询、数组和 COM 对象是复值的示例。错误的最可能原因是您试图将复杂值用作简单值。例如,您可能试图在 cfif 标记中使用查询变量。错误发生在第 20 行。

尝试执行以下操作时:

<cfquery datasource="retailers" name="myQuery">
Select * FROM retailer 
WHERE retailer_id = '#url.id#'
</cfquery>

<cfset fieldList = "company,phone,phone_secondary,fax,email,website">
<cfloop list="#fieldList#" index="i">      
#myQuery[i]#
</cfloop>

难道不应该在不给我错误的情况下工作吗?我觉得我只是忽略了一些简单的事情,我在任何地方都找不到答案。

【问题讨论】:

  • 澄清:您是否尝试从查询结果中输出列名列表?或者你只是想做最明显的事情——那就是:循环查询结果(即所有数据行)并输出它们。我问是因为您没有具体说明您想要什么,而且代码(如所写)可能会采用任何一种方式。

标签: coldfusion


【解决方案1】:

好的,我看到你修改了你的初始代码,所以这是我的回复:

您正在遍历一个列列表,并尝试评估每一列,就好像它是结构中的单个元素一样。

然而,查询稍有不同:它作为一系列结构访问,而这些结构又是数组——从查询返回的每一行数据。

如果你想输出所有的数据行,而不知道前面的列(或者像你在上面的代码中暗示的那样动态地传递它们),试试这个:

<cfoutput query="myQuery">
  <cfloop list="#myQuery.ColumnList#" index="thisColumn">
    #myQuery[thisColumn][myQuery.CurrentRow]#
  </cfloop>
</cfoutput>

这将为您提供所需的输出。带有查询属性的外部 cfoutput 将遍历您收到的所有数据行。然后,对于每一行,循环查询生成的列列表,并为每一列输出数据,通过 myQuery.CurrentRow 指定行,它通过外部输出自动为您迭代。

我现在还要花一点时间来提倡你尽量远离循环中的循环,而只是明确地输出你的值:

<cfoutput query="myQuery">
  #company# #phone#
</cfoutput>

使用这种语法比前面提到的循环中的循环稍微便宜。

【讨论】:

  • 非常详细和很棒的答案!谢谢肖恩,非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-22
  • 2020-10-29
  • 2013-04-07
相关资源
最近更新 更多