6

私はcfloopクエリを超えています。属性を取得したいのですが、実行時までその属性がどうなるかわかりません。使用#qryResult[MyAttr]#は失敗し、「複雑なオブジェクトタイプは単純な値に変換できません」というエラーが表示されます。これを行うための構文は何ですか?

簡単な例を次に示します。

<cfquery datasource="TestSource" name="qryResult">
    SELECT * FROM MyTable
</cfquery>

<cfloop query="qryResult">
    <cfset MyAttr="autoid" />
    <cfoutput>
        Test 1: #qryResult.autoid# <br/>  <!--- succeeds --->
        Test 2: #qryResult[MyAttr]# <br/> <!--- fails --->
    </cfoutput>
</cfloop>
4

1 に答える 1

13
<cfloop query="qryResult">
  <cfset MyAttr="autoid" />
  <cfoutput>
   Test 1: #qryResult.autoid# <br/>  <!--- succeeds --->
   Test 2: #qryResult[MyAttr][qryResult.CurrentRow]# <br/> <!--- succeeds --->
  </cfoutput>
</cfloop>

CurrentRowリテラル構文()では暗黙的query.colです。<cfloop query="...">/のインデックス<cfoutput query="...">(またはループの外側で使用される場合は1)に関連付けられます。

query[col][row]「配列インデックス」構文( )で明示的に言及する必要がありquery[col]ます。これは、単独で列オブジェクト(エラーが参照する「複合型」)を返すためです。

副作用:これを使用して、ループ外のクエリ結果にランダムアクセスできます(つまり、多次元配列として)。関心のある行の数がわかれば、行に直接アクセスできます。

于 2010-04-05T21:53:09.590 に答える