2010-01-06 133 views
6

有没有更好的方法来编写以下内容?评估功能

<cfloop list="#qry.Columnlist#" index="FieldName"> 
    <cfset "form.#FieldName#" = Evaluate("qry.#FieldName#")> 
</cfloop> 

此循环将查询中的每个字段分配给相应的表单字段。 我明白评估功能是避免的。

回答

11
<cfloop list="#qry.Columnlist#" index="FieldName"> 
    <cfset form[FieldName] = qry[FieldName][1]> 
</cfloop> 

+1

很好的答案!我今天也在寻找解决方案。 – 2010-01-07 17:20:43

+0

'评价(“qry。#myArr [i] .foo#”)'我试过'qry [myArr [i] [foo]]'但是没有运气 – isurfbecause 2012-10-26 00:32:09

+0

@isurfbecause不知道你在那儿问什么,但是对于数组对象,它是'[fieldName] [rowIndex]'。 'foo'是否是rowIndex?如果是这样,首先将'myArr [1]'设置为某个变量,然后使用它。 CF可能不喜欢嵌套'[]' – Henry 2012-10-26 01:13:28

4

假设您正在返回单个记录集,以下操作将起作用。

<cfloop list="#qry.Columnlist#" index="FieldName"> 
<cfset "form.#FieldName#" = qry[FieldName][1]> 
</cfloop> 
+1

从技术上讲,没有什么不对。但是你可以走完整路,并在cfset的两边使用数组符号;) – Leigh 2010-01-06 20:30:07

+0

好点。 :)。 – jarofclay 2010-01-06 20:36:21

1

切线,但如果您循环查询的多行,则可以在查询对象中使用currentRow变量来执行与接受的答案相同的操作。

<cfset var someStruct = {} /> 
<cfset var colummnList = queryObj.columnList /> 

<cfloop query="queryObj"> 
    <cfset someStruct[currentRow] = {} />   

    <cfloop list="#columnList#" index="fieldName"> 
     <cfset someStruct[currentRow][fieldName] = queryObj[fieldName][currentRow] /> 
    </cfloop> 
</cfloop> 
+0

非常有趣。我混淆了混合结构符号和数组符号,但我会研究这一点。谢谢! – 2010-01-14 15:39:13

+0

对不起,{}是StructNew()的缩写,[]是ArrayNew(1)的缩写, – Bialecki 2010-01-14 18:28:58