0

CFLOOP を介して構造体に動的に変数を設定しようとしています。Ben Nadal のブログ投稿を読みましたが、割り当てが正しくないようです。ドット表記を使用して、VIN を値のサブ構造体にしたいと考えています。

これが私のコードです:

<cfloop query="VINs">
    <cfquery name="carsQue" datasource="carsData">
      SELECT VIN, MODEL, MAKE, etc
      FROM CarsDB
      WHERE (VIN = #VIN#)
    </cfquery>

     <cfset carsStruct= StructNew()>
     <cfset carsStruct.[VIN].MAKE = '#carsQue.MODEL#'>
     <cfset carsStruct.[VIN].MODEL = '#carsQue.MAKE#'>
</cfloop>

ご指導いただければ幸いです。

ありがとう

4

3 に答える 3

4

ループの外側に構造体を作成し、ループ内に変数を設定することで問題を解決できます。現在のシナリオでは、ループが実行されるたびに新しい構造が作成されます。

あなたはこのようなことをすることができます

 <cfset carsStruct= StructNew()>
 <cfloop query="VINs">
   <cfquery name="carsQue" datasource="carsData">
   SELECT VIN, MODEL, MAKE, etc
   FROM CarsDB
   WHERE VIN = <cfqueryparam cf_sql_type="cf_sql_varchar" value="#VINs.VIN#">
   </cfquery>

   <cfset carsStruct[VINs.VIN].MAKE = carsQue.MODEL>
   <cfset carsStruct[VINs.VIN].MODEL = carsQue.MAKE>
 </cfloop>
于 2013-04-21T06:12:10.807 に答える
2

与えられた限られた情報に基づいて、1 つのクエリを実行し、それをループして構造体に追加できるはずです。

<cfset carsStruct= {}> //new struct
<cfif VINs.RecordCount> //your VINs query has records
  <cfquery name="carsQueue" datasource="carsData">
  SELECT VIN, MODEL, MAKE, etc
  FROM CarsDB
  // Quoted list of all your VINs. cfqueryparam prevents against SQL injection 
  WHERE VIN IN (<cfqueryparam cf_sql_type="cf_sql_varchar" value="#ValueList(VINs.VIN)#" list="true">
  </cfquery>


  <cfloop query="carsQueue">
    <cfset carsStruct.[carsQueue.VIN].MAKE = carsQueue.MODEL>
    <cfset carsStruct.[carsQueue.VIN].MODEL = carsQueue.MAKE>
  </cfloop>
<cfelse>
   // if VINs query return nothing a blank struct will be returned.
   //You do NOT need this <cfelse> unless you are returning something when the query is blank
</cfif>
于 2013-04-21T12:36:54.080 に答える