2011-12-18 6 views
0

Довольно новый вопрос о новичках. У меня есть форма, которая извлекает значения записи для обновления.CFUPDATE - Обновление базы данных

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

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

ответ

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

+0

Спасибо! Я пробовал базовый CFupdate, но он по-прежнему не обновляется? Это потому, что я не могу правильно передать ПК? – ez007

+0

Ive обновил вопрос с помощью информации о 'форме сбора' от моей 'submit' страницы – ez007

+0

@ ez87: Я не уверен, почему, из всего, вы хотели бы обновить «Поставщика» в результате успеха покупки , Что именно должно произойти с этим кодом? – Tomalak

Смежные вопросы