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]を使用して、外部データ ソースから取得されます。XCFLoop には 50 のエントリがあることに注意してください。

利用可能なデータがある場合、コードは美しく機能します。ただし、欠落しているデータがあると、コードが壊れます。つまり、エントリ 11 にfirst[x]変数の名前がリストされていない場合、次の行に沿ってエラーが発生します。"Element first is undefined. The error occurred on line 5

(5 行目は名のエントリです)。

これが発生した場合、結果からエントリ 11 (およびエラーの原因となる他のすべてのエントリ) を省略し、エラーが表示されないようにしたいと考えています。これどうやってするの?

明確化:データが定義されていると仮定してください。外部データソースを使用しているため、少し面倒です。しかし、私が言いたいのは、エントリ 1 から 10 が表示されるということです。エントリー 11 の番になると、エラーが発生します。

4

2 に答える 2

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つある場合(つまり、データが見つからない場合)、50ではなく47のエントリが出力されます。それが問題である場合は、コメントを追加してください...常に50のアイテムがあることを確認するための代替アプローチがいくつかあります。出力。

于 2012-04-25T17:23:54.307 に答える
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 に答える