2014-05-20 77 views
-1

我試圖從結果集循環中識別修改後的記錄。我需要找到修改後的記錄並將其插入到其他表中。如何從cfloop結果集中的表中插入記錄僅在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

@Matt - 如果用戶修改任何結果集的值並提交頁面...我們需要識別修改後的值並插入到表格中..謝謝! – TGR

回答

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> 

目前,對於這些表單字段沒有name屬性。你需要一個,它需要包括一些東西來識別記錄。類似這樣的:

<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塊中。提交表單時,您可以比較用戶在文本框中的內容與隱藏字段中的內容。這將確定變化,並且您可以採取必要的行動。

+0

循環中的結果集超過50條記錄..我如何知道哪一條是修改的記錄,以及如何更新或插入表中這些更新的值?謝謝! – TGR

+0

你如何解釋這個答案的最後兩句話。 –

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字段,以便確定是否再次編輯該記錄。