1

请忽略此帖。我在这里对我的问题做了一个更清楚的例子: 当条目丢失时 CFLoop 出错

我正在运行下面的 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 时,就会出现错误。

4

2 回答 2

1

在循环中使用外部数据库的记录计数应该可以防止错误。

<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>
于 2012-04-25T17:10:25.287 回答
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 个条目输出。

于 2012-04-25T17:23:54.307 回答