请忽略这篇文章。我在这里做了一个更清楚的例子: 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轮时,那就是错误出现的时候。
答案 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个项目输出。