无效列表索引1004错误

时间:2013-03-13 14:16:12

标签: oracle coldfusion

我有一个页面,允许用户检查他们想要更新的字段并点击保存。我在页面上有以下代码,通过选中复选框可以完成多个更新。

<cfif isDefined("form.update")> 
    <cfset list1=#form.vselection#>

    <cfif isDefined("form.vselection") and listlen(form.vSelection) gt 0>
        <cfset vempID = #UCase(Right(cgi.remote_user,6))#> 
        <cfloop index="i" from="1" to="#listlen(form.vselection)#">
        <cfset vSelectedval = Listgetat(form.vselection,i)>
        <cfset v_position_id = Listgetat(form.vpostn,vselectedval)>
        <cfset v_sched_grp = Listgetat(form.vschgrp,vSelectedval)>
        <cfset v_accr_prof = Listgetat(form.vaccprof,vSelectedval)>
        <cfset v_pay_rule = Listgetat(form.vpayrul,vSelectedval)>       
        <cfset v_rest_days = Listgetat(form.vrestdays,vSelectedval)>                

        <!--- This is the update query --->
        <cfquery name="updpostn" datasource="mbtran">
            UPDATE KRONOS_IF.POSITION_DETAIL
            SET schedule_group  = '#v_sched_grp#',
                accrual_profile = '#v_accr_prof#',
                pay_rule_name = '#v_pay_rule#',
                rest_days = '#v_rest_days#'
            WHERE position_id = '#v_position_id#'
        </cfquery>               
        </cfloop>
    </cfif>
</cfif>

我收到无效列表索引1004错误。我无法解决这个问题。请建议此代码有什么问题。

2 个答案:

答案 0 :(得分:1)

如果form.vselection是一堆复选框,那么空列表元素不应成为问题。但是,让我们看看这三行。

    <cfloop index="i" from="1" to="#listlen(form.vselection)#">
    <cfset vSelectedval = Listgetat(form.vselection,i)>
    <cfset v_position_id = Listgetat(form.vpostn,vselectedval)>

我们还假设form.vselection的第一个元素是1004.下一个命令是查找form.vpostn的第1004个元素。很可能表单字段是1个元素的列表,而不是1004。

这就是问题所在。如果您需要帮助解决它,请告诉我们。

答案 1 :(得分:0)

我建议将列表转换为数组以查找值。在我看来,代码比listGetAt更清晰。

<cfset list1 = listtoarray(form.vselection,',',true)>//use true to include empty rows for blank list items

<cfif structKeyExists(form,'vselection') and NOT arrayIsEmpty(list1)>
    <cfset vempID = UCase(Right(cgi.remote_user,6))> 
    <cfloop index="i" from="1" to="#listlen(form.vselection)#">
        <cfset vSelectedval = list1[i]>
    </cfloop>
</cfif>