CFUPDATE - Обновление базы данных - PullRequest
0 голосов
/ 18 декабря 2011

Снова довольно новый вопрос. У меня есть форма, которая получает значения записи для обновления.

Он отлично просматривает записи, однако, когда я нажимаю кнопку обновления, вы попадаете на страницу действий, где отображается сообщение об успехе. Однако данные не были обновлены в самой базе данных?

    <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 Ответ

2 голосов
/ 18 декабря 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...