1

少しわかりにくいタイトルですが、ここで明確にしようと思います。内部でクエリオブジェクトを使用<cfscript>し、フォームにいくつかのSQLがある場合:

 SELECT city + ', ' + state + ' ' + zip as Address2
 FROM users WHERE user_id = :userid

ColdFusion はエラーになります。:useridを使用して追加したパラメーターであり、state と zipaddParamの間を削除すると、クエリは完全に機能します。' 'なんらかの理由で、そのスペースを追加すると、クエリオブジェクトがうまくいかなくなり、:シンボルの近くで間違った構文が表示されます。

このクエリは、単純に を使用しても問題なく動作します<cfquery>が、 で使用したいと考えてい<cfscript>ます。何か案は?これはバグですか?または私は何かを逃していますか?

編集: 私は Coldfusion 9、MS SQL 2005 を使用していますが、これは cfscript 構文を使用して CFC 内で行われています。そのようです:

component
{
  public function getAgent(member_id)
  {
    qryAgent = new query(dataSource="Members");
    qryAgent.setName("get_agent");
    qryAgent.addParam(name="memberid",value=member_id,cfsqltype="CF_SQL_INTEGER");

    result = qryAgent.execute(sql="SELECT FirstName, LastName, FirstName + ' ' + LastName as FullName FROM Member m WHERE m.member_id = :memberid");
    return result.getResult();
  }
}
4

2 に答える 2

1

投稿されたコードからの構文は、MS SQL に対してしっかりしているように見えます。ACF 9 と MS SQL Server 2008 がインストールされたローカル ボックスで次のテストを実行しました (2005 を使用していることは知っていますが、文字列連結などについては同じはずです)。

<cfscript>
    qry = new query();
    qry.setDatasource("mydsn");
    qry.setName("myqry");
    qry.addParam(name="userid",value="3735",cfsqltype="cf_sql_integer");
    result = qry.execute(sql="SELECT firstname + ' ' + lastname AS fullname FROM mydb where userid = :userid");
    writeDump(result);
</cfscript>

これをブラウザで実行すると、正しく連結された「フルネーム」値が返されます。

ひょっとして、このコード スニペットは、完全な cfscript クエリの異常を明らかにするのに役立つでしょうか? そうでない場合は、クエリ サービスの設定に関連するコードをもっと投稿していただけませんか?

編集: また、次の 'result =' 式を使用して実行し、実行している連結のようにしました:

result = qry.execute(sql="SELECT firstname + ', ' + lastname + ' ' + email AS fullname FROM mydb where userid = :userid");
于 2012-04-12T16:40:03.717 に答える
1

デバッグして答えを見つけた後、他の誰かがすでにここでこれを見つけていることがわかりました:http://forums.adobe.com/thread/683656?tstart=-4そしてAdobeはCF 9.0.1でそれを修正しました

問題は、ColdFusion9\CustomTags\com\adobe\coldfusion\query.cfc フォルダにある query.cfc ファイルにあります。replaceDelimsWithMarkers 関数には listtoarray への呼び出しがあります (私のバージョンでは 346 行目)。この呼び出しでは、3 番目の引数 includeEmptyFields が true に設定されていないため、SQL 文字列が壊れてしまいます。

これは、3 番目の引数 true を追加することで手動で修正できます。

于 2012-04-12T19:17:55.463 に答える