如何在cfloop结果集中仅在coldfusion中插入记录

时间:2014-05-20 20:21:21

标签: html coldfusion coldfusion-9

我正在尝试从结果集循环中识别修改后的记录。我需要找到修改后的记录并插入到coldfusion中的其他表中。

我的结果集

 <cfquery name="xyz" datasource="xyz">
  Select * from Table_xyz
    </cfquery>

  <form name="ABC" action="#CGI.SCRIPT_NAME#" method="post">
   <table id="tbl" cellpadding="1" border="1px" style="width:100px">    
    <tr bgcolor="##3333CC">                 
     <td width="60"><font size=-1 color="White">Account</font></td>      
        <td width="250"><font size=-1 color="White">Description</font></td>      
        <td width="150"><font size=-1 color="White">PRD</font></td>     
       <td width="200"><font size=-1 color="White">$$/Month</font></td>  
    </tr>
    <cfoutput query="xyz> 
       <tr> 
       <td><input type="text" name="acct" value="#acct#"></td>
       <td><input type="text" name="desc" value="#Description#"></td>
        <td><input type="text" name="PRD" value="#PRM#"></td> 
       <td><input type="text" name="PRM" value="#PRM#"></td>
      </tr> 
          <input type="submit" name="submit" value="submit">

  </cfoutput>

2 个答案:

答案 0 :(得分:0)

这是关键:

<cfoutput query="xyz"> 
  <tr> 
    <td><input type="text" value="#acct#"></td>
    <td><input type="text" value="#Description#"></td>
    <td><input type="text" value="#PRM#"></td> 
    <td><input type="text" value="#PRM#"></td>
  </tr> 

目前,这些表单字段没有名称属性。你需要一个,它需要包含一些东西来识别记录。像这样:

<cfoutput query="xyz"> 
  <tr> 
    <td><input type="text" name="acct#id#" value="#acct#"></td>
    <td><input type="text" name="description#id#" value="#Description#"></td>
    <td><input type="text" name="prm#id#" value="#PRM#"></td> 
    <td><input type="text" name="something#id#" value="#PRM#"></td>
  </tr> 

然后添加隐藏字段。这是acct的一个例子。

 <input type="hidden" name="orig_acct#id#" value="#acct#">

这仍然在cfoutput块中。提交表单后,您可以比较用户在文本框中的内容与隐藏字段中的内容。这将识别变化,您可以采取必要的行动。

答案 1 :(得分:0)

我认为最简单的答案可能是在用户提交更新时在新表中插入。

<cfif structKeyExists(form, "submit")>
<cfquery name="abc" datasource="xyz">
        INSERT INTO Table_abc VALUES (
            <cfqueryparam cfsqltype="cf_sql_integer" value="#form.id#">
            ,<cfqueryparam cfsqltype="cf_sql_varchar" value="#form.acct#">
            ,<cfqueryparam cfsqltype="cf_sql_varchar" value="#form.desc#">
            ,<cfqueryparam cfsqltype="cf_sql_integer" value="#form.PRD#">
            ,<cfqueryparam cfsqltype="cf_sql_integer" value="#form.PRM#">
            ) 
    </cfquery>    

    <cfquery name="xyz" datasource="xyz">
        UPDATE Table_xyz SET 
            acct = <cfqueryparam cfsqltype="cf_sql_varchar" value="#form.acct#">
            ,Description = <cfqueryparam cfsqltype="cf_sql_varchar" value="#form.desc#">
            ,PRD = <cfqueryparam cfsqltype="cf_sql_integer" value="#form.PRD#">
            ,PRM = <cfqueryparam cfsqltype="cf_sql_integer" value="#form.PRM#">
        WHERE id = <cfqueryparam cfsqltype="cf_sql_integer" value="#form.id#">
    </cfquery>
</cfif>

如果出于某种原因无法做到这一点,我会尝试在现有表中添加类似modified_flag和/或modified_timestamp字段的内容,这样您就可以将记录标记为已修改以及修改后的记录。

<cfif structKeyExists(form, "submit")>
    <cfquery name="abc" datasource="xyz">
        UPDATE Table_xyz SET 
            acct = <cfqueryparam cfsqltype="cf_sql_varchar" value="#form.acct#">
            ,Description = <cfqueryparam cfsqltype="cf_sql_varchar" value="#form.desc#">
            ,PRD = <cfqueryparam cfsqltype="cf_sql_integer" value="#form.PRD#">
            ,PRM = <cfqueryparam cfsqltype="cf_sql_integer" value="#form.PRM#">
            ,modified_flag = <cfqueryparam cfsqltype="cf_sql_varchar" value="#form.modified_flag#">
            ,modified_timestamp = <cfqueryparam cfsqltype="cf_sql_varchar" value="#form.modified_timestamp#">
        WHERE id = <cfqueryparam cfsqltype="cf_sql_integer" value="#form.id#">
    </cfquery>
</cfif>

<cfquery name="xyz" datasource="xyz">
    Select * from Table_xyz
</cfquery>


<table id="tbl" cellpadding="1" border="1px" style="width:100px">   
    <tr bgcolor="##3333CC">                 
        <td width="60"><font size=-1 color="White">Account</font></td>      
        <td width="250"><font size=-1 color="White">Description</font></td>     
        <td width="150"><font size=-1 color="White">PRD</font></td>    
        <td width="200"><font size=-1 color="White">$$/Month</font></td>  
    </tr>
    <cfoutput query="xyz"> 
    <form name="ABC" action="#CGI.SCRIPT_NAME#" method="post">
    <input type="hidden" name="id" value="#id#">
    <input type="hidden" name="modified_flag" value="y"> 
    <input type="hidden" name="modified_timestamp" value="#DateFormat(now(), "mm/dd/yy hh:mm:ss")#">
    <tr> 
        <td><input type="text" name="acct" value="#acct#"></td>
        <td><input type="text" name="desc" value="#Description#"></td>
        <td><input type="text" name="PRD" value="#PRD#"></td> 
        <td><input type="text" name="PRM" value="#PRM#"></td>
        <td><input type="submit" name="submit" value="submit"></td>
    </tr>
    </form>

    </cfoutput>
</table>

我对您的表单做了一些小改动。最值得注意的是,我在输出循环中提取了表单标记,以便在用户单击提交时单独提交每条记录,并为每条记录添加“id”字段,以便您可以可靠地确定用户正在更新哪条记录。此外,我将提交按钮移动到表中,以便它们显示在它们运行的​​记录旁边。

将记录复制到第二个表后,您可以重置modified_flag和/或modified_timestamp字段,以便确定是否第二次编辑记录。