尝试输出查询值时出现复杂对象错误

时间:2012-03-08 23:01:30

标签: coldfusion

我的目标是输出“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>

如果没有给我错误,这不应该工作吗?我觉得我只是忽略了一些简单的事情,我无法在任何地方找到答案。

1 个答案:

答案 0 :(得分:8)

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

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

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

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

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

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

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

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

使用此语法比循环中的上述循环稍微便宜。