2011-12-30 14 views
0

ほとんどの場合、構造体やオブジェクトの表記が不要になる前に、coldfusionをクエリに使用しました。私が取り組んでいるサーバーでは、デバッグが「500-内部サーバーエラー」になっていないので、なぜ私のコードが機能していないのかわかりません。悲しいことに、デバッグをオンにする機能がありません。coldfusion構造体の構文とクエリのデータ

試してみるとエラーが発生し、私の構造体行にエラーが発生していて、構造体を配列に追加していることがわかりました。私がCFのドキュメントを読んだところから、私は文法上の誤りは見られませんでしたが、何か悪い論理があるのか​​、何が間違っているのか、助けてください。ショーンさんのコメントに

<cfset dataArray = []> 
<cfset i = 0> 
<cfloop query="getMembers"> 
     <cfquery name="getmaps" datasource=“a" dbtype="odbc"> 
     SELECT  member_id, mlong, mlat 
     FROM   maps 
     WHERE  member_id = '#getMembers.MemberID#' 
     </cfquery> 
     <cfif getmaps.recordcount eq 1> 
      <!--- temp structure to insert into array ---> 
      <cfset dataTemp = { 
       memberID = getMemebers.memberID, 
       name = getMemebers.MemberName, 
       long = getmaps.mlong, 
       lat = getmaps.mlat 
      }> 
      <cfset dataArray[i] = dataTemp> 
      <cfset i++> 
     </cfif> 
    </cfloop> 
+3

さて、あなたの構造体のキー値の名前には、まずは、getMemebers!= getMembersがあります。 –

答えて

5

I加えて、私はあなたが1 ColdFusionが1

編集いくつかのより多くの提案で、配列のインデックスを開始するのではなく、0であなたの配列インデックスを開始するとの問題があるでしょうと信じて:

<cfset dataArray = []> 
<cfloop query="getMembers"> 
     <!--- Not usually a good idea to query each time through a loop - should be able to do a single query outside it ---> 
     <cfquery name="getmaps" datasource=“a" dbtype="odbc"> 
     SELECT  member_id, mlong, mlat 
     FROM   maps 
     WHERE  member_id = <cfqueryparam value='#getMembers.MemberID#' cfsqltype="cf_sql_varchar"><!--- assuming varchar since you had quotes around it ---> 
     </cfquery> 
     <cfif getmaps.recordcount eq 1> 
      <!--- temp structure to insert into array ---> 
      <cfset dataTemp = { 
       memberID = getMembers.memberID, 
       name = getMembers.MemberName, 
       long = getmaps.mlong, 
       lat = getmaps.mlat 
      }> 
      <cfset ArrayAppend(dataArray,dataTemp)> 
     </cfif> 
</cfloop> 
+0

私の例では、 'i'変数を完全に削除し、代わりに組み込みのCF配列操作関数ArrayAppendを選択したことを指摘しておきます。そうすれば、対処する変数が1つ少なくなります。 –

3

1つのクエリに2つのクエリを組み合わせることを検討する必要があります。

<cfquery name="qryMemberMaps" datasource="a" dbtype="ODBC"> 
SELECT 
    members.memberID, members.MemberName, 
    maps.mlong, maps.mlat 
FROM 
    [members_database].dbo.members JOIN [maps_database].dbo.maps ON members.memberID = maps.member_id 
</cfquery> 

現在の方法では、必要なときに数千のクエリが生成される可能性があります。

自分でクエリをループして他のクエリを呼び出すときはいつでも、元のクエリを修正してデータベースサーバーを壊すのを避けることをお勧めします。

データを構造体の配列に入れるために、Jakeの答えがうまくいきます。

+0

マップテーブルが別のデータベースにあるのは悲しいことですが、CFのデータベース間で結合できますか?私は以前に試したことがありますが、エラーが発生しただけです。 – rajh2504

+0

通常、はいです。データソースアカウントに*両方のデータベースに対する権限があると仮定します。 – Leigh

+0

データベースが両方ともMicrosoft SQL Serverである場合、私はあなたができることは確かに知っています。 FROM句でデータベース表を完全修飾する必要があります。上のクエリを更新して、完全修飾データベーステーブルの例を含めました。 –

0

複数のDBに参加する場合は、プライマリ/外部キーとして機能する列に非クラスタ化インデックスを作成することを確認してください。

+0

クラスター化されていないインデックスが意味することを正確にはわかりません。 – rajh2504