2012-02-07 66 views
2

我有几个有这样的一些代码的地方:升级到ColdFusion的9越来越奇怪CFIF错误

<cfinvoke component="#application.path#cfc/eval_faculty" method="getPresentations" returnvariable="presentations"> 
    <cfinvokeargument name="id" value="#eval_id#"> 
    <cfinvokeargument name="evalYear" value="#eval_semester#"> 
    <cfinvokeargument name="department" value="#general.dept#"> 
</cfinvoke> 

<cfset prescheck = 0> 
<cfloop query="presentations"> 
    <cfif local eq "" and regional eq "" and national eq "" and international eq ""> 
     <cfset prescheck = prescheck+1> 
    </cfif> 
</cfloop> 

我得到这个错误:

Complex object types cannot be converted to simple values. 

在CFIF这些值都没有语句是一个复杂的对象。

这ColdFusion的8工作得很好,我们刚刚升级到ColdFusion的9 ...与<cfif local eq "" ... >

任何想法线发生

的错误?

回答

7
<cfif local eq "" 

这可能是LOCAL现在处于CF9系统范围,像FORMURL,etecetera。所以当你尝试对它进行字符串比较时,CF会抱怨,因为它是一个结构。如果LOCAL代表旧代码中的简单变量,请尝试使用其他变量名称。

更新:从意见,如果LOCAL是在你的查询中的列名,你既可以使用SQL别名给它另外一个名字:

SELECT Local AS LocalAlias FROM Table 

...或者使用完全限定的变量名称:

<cfif queryName.local ...> 
+0

如果我不能?本地是数据库表格属性的名称。 :( – Bri 2012-02-07 19:26:30

+0

这段代码是否在一个cffunction中使用?你可以在查询中使用别名来替代SELECT Local LocalAlias,然后使用别名,或者你可以尝试使用完全限定的名称:例如'' – Leigh 2012-02-07 19:31:07

+0

噢,今天我真的很愚蠢,我忘了你可以做xxx ......但是我改变这种做法并不明智,因为它在很多地方都有使用。现在我在执行query.local,我认为当我在中指定查询时,它会将本地识别为在查询范围内。 – Bri 2012-02-07 19:32:02

相关问题