Выполнение cfquery ColdFusion - PullRequest
       2

Выполнение cfquery ColdFusion

0 голосов
/ 03 декабря 2011

cfquery выполняется при каждой загрузке страницы?Я спрашиваю, потому что я получаю порядковый номер с запросом, а затем использую его в форме.К сожалению, кажется, что запрос выполняется каждый раз при загрузке страницы.Я не хочу, чтобы это случилось.Я также попытался поместить его в cffunction, а затем вызвать его из параметра onSubmit поля cfinput, в котором используется порядковый номер, но он все равно вызывает последовательность.

Вот примеры того, как я 'Я пытался сделать это:

<cfquery name="payment_seq_num" datasource="ORCL">
        select ratner01.payment_id_seq.nextval as seq from dual
    </cfquery>
  <cfset paymentid = payment_seq_num.seq>

И

<cffunction name="getVetSeq" output="false">
  <cfquery name="vet_seq_num" datasource="ORCL">
        select ratner01.vet_id_seq.nextval as seq from dual
    </cfquery>
  <cfset  vet_form.VET_ID = vet_seq_num.seq>

</cffunction>

Я понимаю, почему первый продолжает увеличиваться ... он в голове и вызывается каждый раз.Но почему второй будет выполнять каждую загрузку страницы?

Вот как я это называю:

<cfform action="vet_output.cfm" method="post" format="html" class="cfform" name="vet_form">
    <fieldset>
        <legend>Add a Veterinarian to the Databse</legend> 
    <table>
        <tr><cfoutput>
            <td><cfinput type="hidden" name="VET_ID" onsubmit="#getVetSeq()#"></td></cfoutput>
        </tr>
        <tr>
            <td>Vet First Name:<br/> <cfinput type="text" name="VET_FNAME" maxlength="35"></td>
            <td>Vet Last name: <br/><cfinput type="text" name="VET_LNAME" maxlength="50"></td>
        </tr>
        <td><cfinput type="submit" value="Insert" name="vetSubmit"></td>
    </table>
    </fieldset>
</cfform>

Итак, я добавил это на страницу вывода и удалил весь связанный код из вводастраница, благодаря некоторым предложениям, и это сработало ...:

  <cfquery name="vet_seq_num" datasource="ORCL">
            select ratner01.vet_id_seq.nextval as seq from dual
        </cfquery>
  <cfset FORM.VET_ID = vet_seq_num.seq>
  <cfinsert name="insert_vet" datasource="ORCL" username="XX" password="XX"
    tablename="VET"
    formfields="VET_ID, VET_FNAME, VET_LNAME">

Ответы [ 2 ]

1 голос
/ 03 декабря 2011
<cfset  vet_form.VET_ID = vet_seq_num.seq>

Значения формы, отправленные с помощью method="POST", доступны в структуре системы с именем FORM.Он всегда называется FORM, независимо от имени, присвоенного вашему <form>.Таким образом, правильное имя переменной:

FORM.VET_ID

Однако лучше не получать доступ к области действия FORM из функции.Просто попросите функцию сгенерировать и вернуть новый идентификатор, а остальное оставьте на странице вызова.Это делает функцию более модульной / расширяемой.Но не забывайте var область действия всех локальных переменных функций (для ColdFusion 9+ используйте область действия Local)

<!--- Usage --->
<cfset FORM.VET_ID = generateNewVetID()>

<!--- Function --->
<cffunction name="generateNewVetID" output="false" returnType="numeric">
    <cfset var vet_seq_num = "">
    <cfquery name="vet_seq_num" datasource="ORCL">
        SELECT ratner01.vet_id_seq.nextval AS seq 
        FROM   dual
    </cfquery>
    <cfreturn vet_seq_num.seq>
</cffunction>
1 голос
/ 03 декабря 2011

Да, поэтому при каждой загрузке этой страницы вы будете вызывать эту функцию и получать новый порядковый номер. Потому что каждый раз, когда вы загружаете страницу, #getVetSeq () # будет выполняться ColdFusion.

Я знаю, что вы поместили его в onSubmit (), но onSubmit () - это событие JavaScript, которое не знает о ColdFusion. К тому времени, когда JavaScript увидит этот код, функция уже была вызвана. Если вы посмотрите, вы, вероятно, увидите ошибки JS, потому что когда вы нажимаете «Отправить», вы фактически вызываете несуществующую функцию. Потому что ваш код отображается как что-то вроде:

onsubmit="1234"

Если вы хотите, чтобы он вызывался только при отправке формы, сделайте это в файле output.cfm вместо формы.

Если по какой-то причине вам нужно сделать это на этой странице, а не на странице обработки, вам нужно будет рассматривать это как вызов Ajax, чтобы он выполнялся только в onSubmit ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...