CFUPDATE - 更新数据库

时间:2011-12-18 12:09:22

标签: mysql database coldfusion

又一个新手问题。 我有一个表单来检索记录值以进行更新。

它可以很好地记录记录,但是当我点击更新按钮时,您将进入显示成功消息的操作页面。但是,它自己没有在数据库中更新数据吗?

    <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>

1 个答案:

答案 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>的用途。