又一个新手问题。 我有一个表单来检索记录值以进行更新。
它可以很好地记录记录,但是当我点击更新按钮时,您将进入显示成功消息的操作页面。但是,它自己没有在数据库中更新数据吗?
<CFUPDATE Datasource="XXXXX" Tablename="Suppliers">
UPDATE Suppliers
SET SupplierName=?,
Address1=?,
Address2=?,
City=?,
WHERE SupplierCode = #txtSupplier#
</CFUPDATE>
这是错误的设置吗?我有点不确定如何传递主键,这可能是错误!
我正在以这种方式捕获数据:
<CFQUERY name="GetRecord" datasource="XXXX">
SELECT SupplierName, Address1, Address2, City, PostCode, SalesRepName, SalesRepPhone, SalesRepEmail, PaymentTerms, Notes
FROM Suppliers
WHERE SupplierCode = '#txtSupplier#'
</CFQUERY>
<cfoutput>
<H4>You can update supplier details here. Please note, any fields containing characters not permitted will display an error</H4>
<form action="supplier_updated.cfm?code=#txtSupplier#" method="post">
<input type="Hidden" name="SupplierCode" value="#txtSupplier#"><br>
Update Supplier Name:<INPUT TYPE="text" NAME "SupplierName" VALUE="#Trim(GetRecord.SupplierName)#">
<BR>
<P>The Supplier Code for the Supplier you wish to edit is: #txtSupplier#</P>
<BR>
Address Line 1: <INPUT TYPE="text" NAME "Address1" VALUE="#Trim(GetRecord.Address1)#" SIZE="35" MAXLENGTH="100">
<BR>
Address Line 2: <INPUT TYPE="text" NAME "Address2" VALUE="#Trim(GetRecord.Address2)#" SIZE="35" MAXLENGTH="100">
<BR>
答案 0 :(得分:2)
<cfupdate>
不适用于包含SQL。只需使用:
<cfupdate datasource="XXXXX" tablename="Suppliers" />
并确保表单字段名称与表列名称匹配。 ColdFusion将为您创建适当的UPDATE语句。
通过将表单字段名称与表列名称进行比较,它将确定要更新的列。它还将计算表的主键,并在WHERE
子句中使用它。
请注意,<cfupdate>
适用于非常简单的情况。这是更新基本表的简单方法,但它可能并不总是最适合您打算做的事情。
如果您想要更多地控制更新语句,请使用<cfquery>
和<cfqueryparam>
。
<cfquery datasource="XXXXX">
UPDATE
Suppliers
SET
SupplierName = <cfqueryparam value="#FORM.SupplierName#" cfsqltype="CF_SQL_VARCHAR" />,
Address1 = <cfqueryparam value="#FORM.Address1#" cfsqltype="CF_SQL_VARCHAR" />,
Address2 = <cfqueryparam value="#FORM.Address2#" cfsqltype="CF_SQL_VARCHAR" />,
City = <cfqueryparam value="#FORM.City#" cfsqltype="CF_SQL_VARCHAR" />,
WHERE
SupplierCode = <cfqueryparam value="#txtSupplier#" cfsqltype="CF_SQL_VARCHAR" />
</cfquery>
另请注意,?
通常不是在ColdFusion中指定参数的方式。这就是<cfqueryparam>
的用途。