2016-05-18 5 views
1

数回は、私はこのようなものを持っている:Varスコープの問題がありますか?私の機能で

<cffunction name="mergeData"> 
<cfquery name="myQuery"> 
SELECT columnName FROM tableName 
</cfquery> 

<cfquery dbtype="query" name="myOtherQuery"> 
SELECT columnName FROM myQuery 
</cfquery> 
</cffunction> 

<cfset resulta = mergeData(queryA) /> 
<cfset resultb = mergeData(queryB) /> 
<cfset resultc = mergeData(queryC) /> 

は時折、私はこれを引き起こしている可能性がどのようなエラーのでThe select column reference [myQuery.columnname] is not found in table [myQuery].

を取得します。どうすれば診断できますか?スコープの問題であると思っていたので、関数に関数が含まれていることを確認するために<cfquery name="local.myQuery">を追加します(これはおそらくこれを実行しているはずです)。しかし、時には何かが起こるだけで私は診断する方法を考え出すのが難しいです。

EDIT:なぜスコープ上の問題が発生するのかを明確にしました。私の考えは、myQueryが他の呼び出しで参照されている可能性が高いということです。つまり、データに複数のスレッドを実行しているようなものではありませんが、それが原因である可能性はありますか?他の原因はありますか?これはエラーが発生した場合に必ずしも当てはまるわけではありません。私はまた、それが機能するページ上で一度だけ実行しています。

+0

私はローカルスコープですべての機能に固有の変数名を作り、エラーはなくなりました。 (少なくとも過去5時間以内に)それが問題だったことを意味することを願っています。 – Leeish

答えて

3

クエリのクエリでは、localスコープのプレフィックスのまわりでかっこを使用します。

<cffunction name="mergeData"> 
    <cfquery name="local.myQuery"> 
     SELECT columnName FROM tableName 
    </cfquery> 

    <cfquery dbtype="query" name="local.myOtherQuery"> 
     SELECT columnName FROM [local].myQuery 
    </cfquery> 
</cffunction> 

<cfset resulta = mergeData(queryA) /> 
<cfset resultb = mergeData(queryB) /> 
<cfset resultc = mergeData(queryC) />
+0

ありがとう、私はそれを試みるだろうが、まだ、エラーの任意の考えですか? – Leeish

+0

また、 'SELECT [local] .myQuery.columnName'は機能していないようです。だからあなたが言ったことをすれば、どのように列を参照するのですか?例えば、私のwhere句では、私は 'myQuery.columnName'を持っています。どのように私はそれをフォーマットしようとするに関係なく、 'ローカル'で動作するようにすることはできません。 – Leeish

+0

@Leeish - 単純な 'SELECT columnName FROM [local] .myQuery'はうまくいくはずです。あなたの実際のコードがあなたが投稿したものよりも複雑なことをしていない限り。もしそうなら、質問を精緻化するために更新することができますか? – Leigh

1

私は決して関数内のクエリのクエリで動作するようLOCALを取得したことはありません。

だから私はこれを行う....

<cffunction> 
<cfquery name="VARIABLES.myQuery"> 
SELECT columnName FROM tableName 
</cfquery> 

<cfquery dbtype="query" name="myOtherQuery"> 
SELECT columnName FROM VARIABLES.myQuery 
</cfquery> 
<cffunction> 

私は強く、特にクエリのクエリでは、クエリのために、より明示的な名前を使用することをお勧め。

+0

ローカルを使用しようとすると 'local.'の部分でエラーが発生するので、私は同じことを考えていました。 – Leeish

+0

多くの場合、私はクエリのクエリでSELECT *を使用することを余儀なくされています。私は、ColdFusionのQofQにはいくつかの本当の制限があると思います。 –

+0

明示的な名前はどういう意味ですか? – Leeish

関連する問題