当cfloop中没有指定索引时,当前行的ColdFusion初始值

时间:2013-01-08 23:10:42

标签: coldfusion coldfusion-9 cfquery

我正在将ColdFusion应用程序转换为C#(我是CF n00b)。

我有一个脚本执行cfquery然后cfloop通过结果,它似乎试图将当前行与其后一行进行比较。它似乎试图确保它不会尝试读取数组的末尾。

<cfquery name="qTripLegs" datasource="#sdb#">
   SELECT ...
</cfquery>

<cfloop query="qTripLegs">
    <cfif (customs_stop[currentrow] NEQ "" OR fuel_stop[currentrow] NEQ "") AND recordcount GT currentrow AND departure[currentrow] NEQ arrival[currentrow+1]>

感觉currentntrow是从1开始的(当它首次进入cfloop时,currentntrow的值为1)。我对么?我查看了coldfusion文档,但我没有看到任何相关内容。

2 个答案:

答案 0 :(得分:18)

是的,CF中的查询和数组是从1开始的。

CurrentRow和RecordCount变量是查询的属性(在查询循环中,它们是自动作用域的。)

<cfloop query="QueryName">...</cfloop>将循环遍历整个查询*,从1到QueryName.RecordCountQueryName.CurrentRow索引会自动填充/递增。不使用查询循环之前的值。

*(除非使用cfbreak / etc)

另外要指出的是,通常不需要阻止读取结束(如上所述,查询循环处理它),这只是因为正在使用CurrentRow + 1来避免错误。

答案 1 :(得分:0)

原始问题是查询。 CFloop通过数组没有currentRow属性。有趣的解决方案,如果你想使用循环索引属性来保存数组元素而不是跟踪“currentRow”计数器from="1" to="#arrayLen(myArray)#" index="currentRow"

<cfset currentRow=1>
<cfloop array="#myArray#" index="tRa">
    #currentRow# (#tRa#)...
    #currentRow++#<!--- will display not incremented, then will increment --->
    <cfif ....>#currentRow-1#</cfif><!--- now incremented so have to "-1" --->
</cfloop>

currentRow++都输出变量的当前值,然后递增它 - 代表循环底部的编码<cfset currentRow=currentRow+1>