2011-07-16 16 views
1

cfscriptを使用して、新しく挿入された質問のIDを設定して、回答を挿入して関係を構築できるようにします。私はこれをcfscriptの外で何百万回もやったことがあります。 setNameは、クエリ名を作成するための適切な呼び出し方法です。Coldfusion:クエリ結果セットのvarを参照できません

私は

i = 1; 
while (structKeyExists(form, "question" & i)) 
{ 

    q = new Query(); 
    q.setDatasource("kSurvey"); 
    q.setName("qryQuestion"); 
    q.setSQL(" 
       set nocount on 
       insert into question (question) 
       values('#form["question#i#"]#') 
       select @@IDENTITY AS theQuestionID 
       set NOCOUNT off 
       "); 
    q.execute(); 

    writeOutput("Question"&i&"<br>"); 
    j = 1; 
     while (structKeyExists(form, "question" & i & "_answer" & j)) { 

      q = new Query(); 
      q.setDatasource("kSurvey"); 
      q.setSQL(" 
         insert into answer (answer,questionid) 
         values('#form["question#i#_answer#j#"]#',#qryQuestion.theQuestionID#) 
         "); 
      q.execute(); 

      writeOutput("Answer"&j&"<br>"); 
      j++; 
     } 

i++; 
} 
+1

解決済み、追加しました\t \t result = q.execute(); qryQuestion = result.getResult(); –

+2

Bob - あなたのコメントを回答として追加し、今後の読者に受け入れてください – Antony

答えて

3

は@@自体に最善の方法ではないアイデンティティを(選択しなくても、これを実現するためのより良い方法をtheresの「theQuestionIDは」qryQuestionに存在しないというエラーを受信して​​いますSQL Serverからそれを得るために、SCOPE_IDENTITYを使用すると、SQL Serverの中でこれを行うためのベストプラクティスの方法ですhttp://msdn.microsoft.com/en-us/library/ms190315.aspx

幸いColdFusionは、これがさらに簡単になります:。

<cfscript> 
    insertQuery = new query(); 

    insertQuery.setDatasource("datasourcename"); 

    insertQuery.setSql("insert into contact(firstname, lastname) 
      values('ryan','anklam')"); 

    result = insertQuery.Execute(); 

    theKey = result.getPrefix().generatedkey; 
</cfscript> 
関連する問題