首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cfquery ColdFusion执行

cfquery ColdFusion执行
EN

Stack Overflow用户
提问于 2011-12-03 04:50:58
回答 2查看 1.1K关注 0票数 0

cfquery会在每个页面加载时执行吗?我这样问是因为我要从查询中获得一个序列号,然后在表单中使用它。不幸的是,该查询似乎会在每次页面加载时执行。我不希望这样的事情发生。我还尝试将它放在一个函数中,然后从使用序列号的cfinput框的onSubmit参数中调用它,但它仍然调用这个序列。

下面是我尝试过的一些例子:

代码语言:javascript
复制
<cfquery name="payment_seq_num" datasource="ORCL">
        select ratner01.payment_id_seq.nextval as seq from dual
    </cfquery>
  <cfset paymentid = payment_seq_num.seq>

代码语言:javascript
复制
<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>

我明白为什么第一个函数一直在递增……它在头脑中,每次都会被调用。但是为什么第二个要执行每个页面加载呢?

我是这样称呼它的:

代码语言:javascript
复制
<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>

因此,我将此代码添加到输出页面中,并从输入页面中删除了所有相关代码,这要归功于一些建议,并且它起作用了……:

代码语言:javascript
复制
  <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">
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-03 05:17:41

是的,所以每次加载这个页面时,你都会调用那个函数,并获得一个新的序列号。因为每次加载页面时,ColdFusion都会执行#getVetSeq()#。

我知道你把它放在onSubmit()中,但是onSubmit()是一个JavaScript事件,它不知道ColdFusion。当JavaScript看到代码时,函数已经被调用了。如果您查看一下,您可能会看到JS错误,因为当您单击submit时,您实际上是在调用一个不存在的函数。因为您的代码呈现为类似以下内容:

代码语言:javascript
复制
onsubmit="1234"

如果你只想在表单提交时调用它,那么在你的output.cfm中而不是表单中调用它。

如果出于某种原因,您需要在此页面而不是在处理页面中执行此操作,则需要将其视为Ajax调用,以便它只执行onSubmit()。

票数 1
EN

Stack Overflow用户

发布于 2011-12-04 03:05:50

通过method="POST"提交的表单值在名为FORM的系统结构中可用。无论分配给您的<form>的名称是什么,它始终被称为FORM。所以正确的变量名是:

代码语言:javascript
复制
FORM.VET_ID

但是,不从函数内部访问FORM作用域会更干净。只需让函数生成并返回新的ID,剩下的工作就交给调用页面来完成。这使得功能更具模块化/可重用性。但是要记住在作用域中使用所有函数的局部变量(对于ColdFusion 9+,使用Local作用域)

代码语言:javascript
复制
<!--- 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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8362482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档