2010-01-06 130 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