我正在尝试从结果集循环中识别修改后的记录。我需要找到修改后的记录并插入到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>
答案 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字段,以便确定是否第二次编辑记录。