缺少条目的CFLoop错误

时间:2012-04-25 16:47:30

标签: coldfusion cfloop

请忽略这篇文章。我在这里做了一个更清楚的例子: Error with CFLoop When Entries Are Missing

我正在运行下面的CFLoop代码。

<cfset data = queryNew("sid,firstname,lastname,age","integer,varchar,varchar,integer")>
<cfloop index="x" from="1" to="50">
    <cfset queryAddRow(data)>
    <cfset querySetCell(data,"sid",x)>
    <cfset querySetCell(data,"firstname","#first[x]#")>
    <cfset querySetCell(data,"lastname","#last[x]#")>
    <cfset querySetCell(data,"age","#studentage[x]#")>
</cfloop>

<cfoutput query="data">
    #sid# -  #firstnamet# #lastname# - #age#<br />
</cfoutput>

从外部数据源中提取变量first[x]last[x]studentage[x],其中X是循环索引。请注意,CFLoop有50个条目。

当有可用数据时,代码可以很好地工作。但是,当数据丢失时,代码会中断。我的意思是,如果条目11没有为first[x]变量列出名称,我会在"Element first is undefined. The error occurred on line 5

的行中出现错误

(第5行是名字的条目)。

当发生这种情况时,我想从结果中省略条目11(以及导致错误的所有其他条目)并防止显示错误。我怎么能这样做?

澄清:请假设数据已定义。由于我使用外部数据源,它有点毛茸茸。但我要说的是,参赛作品1到10出现了。当它进入11轮时,那就是错误出现的时候。

2 个答案:

答案 0 :(得分:1)

在循环中使用外部数据库的recordcount可以防止错误。

<cfloop index="x" from="1" to="#ExternalDatabaseQuery.RecordCount#">

一个更好的解决方案,假设你在内存中有查询,就是使用查询查询。

<cfquery dbtype='query' name='data'>
SELECT SID, First AS FirstName, Last AS LastName, Age AS StudentAge
FROM ExternalDatabaseQuery
</cfquery>

答案 1 :(得分:1)

迈克道歉,如果我误解了你所追求的东西,但似乎有些基本条件可以完成这项工作。以下对代码的编辑只是建议如何进行(当然,完整的代码库可能会指示稍微不同的东西)。

<cfset data = queryNew("sid,firstname,lastname,age","integer,varchar,varchar,integer")>
<cfloop index="x" from="1" to="50">
    <cfif isDefined("first[x]") AND isDefined("last[x]") AND isDefined("studentage[x]")>
    <cfset queryAddRow(data)>
    <cfset querySetCell(data,"sid",x)>
    <cfset querySetCell(data,"firstname","#first[x]#")>
    <cfset querySetCell(data,"lastname","#last[x]#")>
    <cfset querySetCell(data,"age","#studentage[x]#")>
    </cfif>
</cfloop>

<cfoutput query="data">
    #sid# -  #firstnamet# #lastname# - #age#<br />
</cfoutput>

这里的主要问题(也许这不是你的问题)是这将输出50 - 错误。因此,如果有3个错误(即没有找到数据),您将有47个条目输出而不是50.如果这是一个问题,请添加评论...有一些替代方法可确保您总是有50个项目输出。