データの更新

データベースのデータを更新するには通常、次の 2 つのアプリケーションページを使用します。

  • 更新フォーム

  • 更新フォームは、cfform タグまたは HTML フォームタグを使用して作成できます。更新フォームでは、更新アクションページが呼び出されます。更新アクションページでは、cfupdate タグ、または SQL の UPDATE ステートメントを含んだ cfquery タグを使用できます。更新アクションページでは、エンドユーザーに確認メッセージを表示する必要もあります。

更新フォームの作成

更新フォームと挿入フォームの主な相違点は次のとおりです。

  • 更新フォームでは、更新するレコードのプライマリキーを参照します。プライマリキーは、各レコードを一意に識別するデータベースの フィールド です。たとえば、従業員名と住所のテーブルでは、Emp_ID のみが各レコードに固有のフィールドです。
  • 更新フォームでは、既存のレコードデータが表示されます。
    更新フォームでプライマリキーを指定する最も簡単な方法は、更新するレコードのプライマリキーの値を持つ非表示入力フィールドを使用することです。この非表示フィールドで、更新するレコードを ColdFusion に指示します。
  1. 次の内容の ColdFusion ページを作成します。

    <html>
    <head>
    <title>更新フォーム</title>
    </head>
    <body>
    <cfquery name=&quot;GetRecordtoUpdate&quot; datasource=&quot;cfdocexamples&quot;>
    SELECT * FROM Employee
    WHERE Emp_ID = #URL.Emp_ID#
    </cfquery>
    <cfoutput query=&quot;GetRecordtoUpdate&quot;>
    <table>
    <form action=&quot;update_action.cfm&quot; method=&quot;Post&quot;>
    <input type=&quot;Hidden&quot; name=&quot;Emp_ID&quot; value=&quot;#Emp_ID#&quot;><br>
    <tr>
    <td>名:</td>
    <td><input type=&quot;text&quot; name=&quot;FirstName&quot; value=&quot;#FirstName#&quot;></td>
    </tr>
    <tr>
    <td>姓:</td>
    <td><input type=&quot;text&quot; name=&quot;LastName&quot; value=&quot;#LastName#&quot;></td>
    </tr>
    <tr>
    <td>部門番号:</td>
    <td><input type=&quot;text&quot; name=&quot;Dept_ID&quot; value=&quot;#Dept_ID#&quot;></td>
    </tr>
    <tr>
    <td>開始日:</td>
    <td><input type=&quot;text&quot; name=&quot;StartDate&quot; value=&quot;#StartDate#&quot;></td>
    </tr>
    <tr>
    <td>給与:</td>
    <td><input type=&quot;text&quot; name=&quot;Salary&quot; value=&quot;#Salary#&quot;></td>
    </tr>
    <tr>
    <td>請負業者:</td>
    <td><cfif #Contract# IS &quot;Yes&quot;>
    <input type=&quot;checkbox&quot; name=&quot;Contract&quot; checked>Yes
    <cfelse>
    <input type=&quot;checkbox&quot; name=&quot;Contract&quot;>Yes
    </cfif></td>
    </tr>
    <tr>
    <td>&nbsp;</td>
    <td><input type=&quot;Submit&quot; value=&quot;情報を更新&quot;></td>
    </tr>
    </form>
    </table>
    </cfoutput>
    </body>
    </html>
    <html> <head> <title>更新フォーム</title> </head> <body> <cfquery name=&quot;GetRecordtoUpdate&quot; datasource=&quot;cfdocexamples&quot;> SELECT * FROM Employee WHERE Emp_ID = #URL.Emp_ID# </cfquery> <cfoutput query=&quot;GetRecordtoUpdate&quot;> <table> <form action=&quot;update_action.cfm&quot; method=&quot;Post&quot;> <input type=&quot;Hidden&quot; name=&quot;Emp_ID&quot; value=&quot;#Emp_ID#&quot;><br> <tr> <td>名:</td> <td><input type=&quot;text&quot; name=&quot;FirstName&quot; value=&quot;#FirstName#&quot;></td> </tr> <tr> <td>姓:</td> <td><input type=&quot;text&quot; name=&quot;LastName&quot; value=&quot;#LastName#&quot;></td> </tr> <tr> <td>部門番号:</td> <td><input type=&quot;text&quot; name=&quot;Dept_ID&quot; value=&quot;#Dept_ID#&quot;></td> </tr> <tr> <td>開始日:</td> <td><input type=&quot;text&quot; name=&quot;StartDate&quot; value=&quot;#StartDate#&quot;></td> </tr> <tr> <td>給与:</td> <td><input type=&quot;text&quot; name=&quot;Salary&quot; value=&quot;#Salary#&quot;></td> </tr> <tr> <td>請負業者:</td> <td><cfif #Contract# IS &quot;Yes&quot;> <input type=&quot;checkbox&quot; name=&quot;Contract&quot; checked>Yes <cfelse> <input type=&quot;checkbox&quot; name=&quot;Contract&quot;>Yes </cfif></td> </tr> <tr> <td>&nbsp;</td> <td><input type=&quot;Submit&quot; value=&quot;情報を更新&quot;></td> </tr> </form> </table> </cfoutput> </body> </html>
    <html> 
    <head> 
    <title>更新フォーム</title> 
    </head> 
    
    <body> 
    <cfquery name=&quot;GetRecordtoUpdate&quot; datasource=&quot;cfdocexamples&quot;> 
    SELECT * FROM Employee 
    WHERE Emp_ID = #URL.Emp_ID# 
    </cfquery> 
    
    
    <cfoutput query=&quot;GetRecordtoUpdate&quot;> 
    <table> 
    <form action=&quot;update_action.cfm&quot; method=&quot;Post&quot;> 
    <input type=&quot;Hidden&quot; name=&quot;Emp_ID&quot; value=&quot;#Emp_ID#&quot;><br> 
    <tr> 
    <td>名:</td> 
    <td><input type=&quot;text&quot; name=&quot;FirstName&quot; value=&quot;#FirstName#&quot;></td> 
    </tr> 
    <tr> 
    <td>姓:</td> 
    <td><input type=&quot;text&quot; name=&quot;LastName&quot; value=&quot;#LastName#&quot;></td> 
    </tr> 
    <tr> 
    <td>部門番号:</td> 
    <td><input type=&quot;text&quot; name=&quot;Dept_ID&quot; value=&quot;#Dept_ID#&quot;></td> 
    </tr> 
    <tr> 
    <td>開始日:</td> 
    <td><input type=&quot;text&quot; name=&quot;StartDate&quot; value=&quot;#StartDate#&quot;></td> 
    </tr> 
    <tr> 
    <td>給与:</td> 
    <td><input type=&quot;text&quot; name=&quot;Salary&quot; value=&quot;#Salary#&quot;></td> 
    </tr> 
    <tr> 
    <td>請負業者:</td> 
    <td><cfif #Contract# IS &quot;Yes&quot;> 
    <input type=&quot;checkbox&quot; name=&quot;Contract&quot; checked>Yes 
    <cfelse> 
    <input type=&quot;checkbox&quot; name=&quot;Contract&quot;>Yes 
    </cfif></td> 
    </tr> 
    <tr> 
    <td>&nbsp;</td> 
    <td><input type=&quot;Submit&quot; value=&quot;情報を更新&quot;></td> 
    </tr> 
    </form> 
    </table> 
    </cfoutput> 
    
    </body> 
    </html>
  2. このファイルに "update_form.cfm" という名前を付けて保存します。

  3. ページ URL および従業員 ID を指定して、"update_form.cfm" を Web ブラウザで表示します。たとえば、*http://localhost/myapps/update_form.cfm?Emp_ID=3 のように入力します。*

注意:

このページでは従業員の情報を表示できますが、データベースを更新するにはアクションページを作成します。詳細については、データを更新するアクションページの作成を参照してください下に。

コードの説明

このコードおよびその機能について、次の表で説明します。

コード

説明

<cfquery name="GetRecordtoUpdate" datasource="cfdocexamples">
SELECT * FROM Employee 
WHERE Emp_ID = #URL.Emp_ID# 
</cfquery>

cfdocexamples データソースにクエリーを実行して、このページを呼び出した URL で指定されている従業員 ID に一致するレコードを返します。

<cfoutput query="GetRecordtoUpdate"> 
... 
</cfoutput>

GetRecordtoUpdate クエリの結果を、この後のフォームで変数として使用できるようにします。

<form action="update_action.cfm" method="Post"> 
... 
</form>

「update_action.cfm」アクションページに渡す変数を設定するフォームを作成します。

<input type="Hidden" name="Emp_ID" value="#Emp_ID#"><br>

非表示入力フィールドを使用して、Emp_ID (プライマリキー) の値をアクションページに渡します。

名:
<input type="text" name="FirstName" value="#FirstName#"><br> 
姓:
<input type="text" name="LastName" value="#LastName#"><br> 
部門番号:
<input type="text" name="Dept_ID" value="#Dept_ID#"><br> 
開始日:
<input type="text" name="StartDate" value="#StartDate#"><br> 
給与:
<input type="text" name="Salary" value="#Salary#"><br>

更新フォームのフィールドにデータを設定します。この例では、ColdFusion の形式設定関数を使用していません。したがって、開始日は 1985-03-12 00:00:00 のように表示され、給与には通貨記号やカンマが追加されません。ユーザーは、有効なデータ入力方法を利用して任意のフィールドの情報を変更できます。

請負業者:
< cfif #Contract# IS "Yes"> 
<input type="checkbox" name="C ontract" checked>Yes<br> 
<cfelse> 
<input type="checkbox" name="Contract"> Yes <br> 
</cfif> 
<br> 
<input type="Submit" value="情報を更新"> 
</form> 
</cfoutput>

「請負業者」フィールドではチェックボックスを表示して値を設定するので、特殊な処理が必要です。cfif 構文を使用して、「請負業者」フィールドの値が Yes であればチェックボックスをオンにします。Yes でなければ無効のままにします。

データを更新するアクションページの作成

データを更新するためのアクションページを作成するには、 cfupdate タグまたは cfquery のいずれかと UPDATE ステートメントを使用します。

cfupdate による更新アクションページの作成

cfupdate タグは、フロントエンドフォームのデータに基づいて単純な更新を行う場合に便利です。cfupdate タグのシンタックスは、cfinsert タグとほとんど同じです。
cfupdate タグを使用するには、フォームから送信するデータにプライマリキーフィールドを含めます。cfupdate タグによって、更新するテーブルのプライマリキーフィールドが自動的に検出されると、受信したフォームフィールドの中からプライマリキーフィールドが検索され、それに基づいて更新するレコードが選択されます (したがって、プライマリキー自体を更新することはできません)。その後、残りのフォームフィールドを使用して、レコード内の対応するフィールドが更新されます。フォームに必要なフィールドは、変更するデータベースフィールドに対応するフィールドのみです。

  1. 次の内容の ColdFusion ページを作成します。

    <html>
    <head>
    <title>従業員の更新</title>
    </head>
    <body>
    <cfif not isdefined(&quot;Form.Contract&quot;)>
    <cfset form.contract = &quot;N&quot;>
    <cfelse>
    <cfset form.contract = &quot;Y&quot;>
    </cfif>
    <cfupdate datasource=&quot;cfdocexamples&quot; tablename=&quot;EMPLOYEE&quot;>
    <h1>従業員が更新されました</h1>
    <cfoutput>
    従業員データベースで #Form.FirstName# #Form.LastName# の情報を更新しました。
    </cfoutput>
    </body>
    </html>
    <html> <head> <title>従業員の更新</title> </head> <body> <cfif not isdefined(&quot;Form.Contract&quot;)> <cfset form.contract = &quot;N&quot;> <cfelse> <cfset form.contract = &quot;Y&quot;> </cfif> <cfupdate datasource=&quot;cfdocexamples&quot; tablename=&quot;EMPLOYEE&quot;> <h1>従業員が更新されました</h1> <cfoutput> 従業員データベースで #Form.FirstName# #Form.LastName# の情報を更新しました。 </cfoutput> </body> </html>
    <html> 
    <head> 
    <title>従業員の更新</title> 
    </head> 
    <body> 
    <cfif not isdefined(&quot;Form.Contract&quot;)> 
    <cfset form.contract = &quot;N&quot;> 
    <cfelse> 
    <cfset form.contract = &quot;Y&quot;> 
    </cfif> 
    
    <cfupdate datasource=&quot;cfdocexamples&quot; tablename=&quot;EMPLOYEE&quot;> 
    
    <h1>従業員が更新されました</h1> 
    <cfoutput> 
    従業員データベースで #Form.FirstName# #Form.LastName# の情報を更新しました。
    </cfoutput> 
    
    </body> 
    </html>
  2. このページに "update_action.cfm" という名前を付けて保存します。

  3. ページ URL および従業員 ID を指定して、"update_form.cfm" を web ブラウザーで表示します。たとえば、*http://localhost/myapps/update_form.cfm?Emp_ID=3 のように入力します。*

  4. いずれかのフィールドに新しい値を入力し、「情報の更新」をクリックします。ColdFusion は、新しい値を使用して「従業員」テーブル内のレコードが更新され、確認メッセージを表示します。

コードの説明

このコードおよびその機能について、次の表で説明します。

コード

説明

<cfif not isdefined("Form.Contract")>
<cfset Form.contract = "N"> 
<cfelse> 
<cfset form.contract = "Y"> 
</cfif>

Form.Contract の値が定義されていない場合は値を No に設定し、定義されていれば Yes に設定します。「請負業者」チェックボックスがチェックされていない場合は、アクションページにデータが渡されませんが、データベースフィールドには何らかの値が必要です。

<cfupdate datasource="cfdocexamples" tablename="EMPLOYEE">

フォームのプライマリキー (Emp_ID) に一致するデータベースレコードを更新します。フォームコントロールと同じ名前を持つレコードフィールドがすべて更新されます。

<cfoutput> 
従業員データベース内の #Form.FirstName#
#Form.LastName# の情報を更新しました。 
</cfoutput>

変更が行われたことをユーザーに通知します。

cfquery による更新アクションページの作成

より複雑なアップデートについては、 cfquery  タグ( cfupdate タグではなく)で SQL UPDATE 文を使用できます。この SQL UPDATE 文を使用すれば、複雑な更新をより柔軟に行うことができます。
次の手順では、update_action. cfm  ページがが既に作成されている( cfupdate を使用した「更新アクションページの作成」を参照)ことを前提としています。

  1. "update_action.cfm" の cfupdate タグを、次のハイライト表示されている部分に置き換えます。

    <html>
    <head>
    <title>従業員の更新</title>
    </head>
    <body>
    <cfif not isdefined(&quot;Form.Contract&quot;)>
    <cfset form.contract = &quot;No&quot;>
    <cfelse>
    <cfset form.contract = &quot;Yes&quot;>
    </cfif>
    <! ---cfquery では、Acess から取得する際に日付形式を設定する必要があります。Access データベースから最初に表示された日付の &quot;.0&quot; をトリミングするには、left 関数を使用します。--->
    <cfquery name=&quot;UpdateEmployee&quot; datasource=&quot;cfdocexamples&quot;>
    UPDATE Employee
    SET FirstName = '#Form.Firstname#',
    LastName = '#Form.LastName#',
    Dept_ID = #Form.Dept_ID#,
    StartDate = '#left(Form.StartDate,19)#',
    Salary = #Form.Salary#
    WHERE Emp_ID = #Form.Emp_ID#
    </cfquery>
    <h1>従業員が更新されました</h1>
    <cfoutput>
    従業員データベースで
    #Form.FirstName# #Form.LastName#
    の情報を更新しました。
    </cfoutput>
    </body>
    </html>
    <html> <head> <title>従業員の更新</title> </head> <body> <cfif not isdefined(&quot;Form.Contract&quot;)> <cfset form.contract = &quot;No&quot;> <cfelse> <cfset form.contract = &quot;Yes&quot;> </cfif> <! ---cfquery では、Acess から取得する際に日付形式を設定する必要があります。Access データベースから最初に表示された日付の &quot;.0&quot; をトリミングするには、left 関数を使用します。---> <cfquery name=&quot;UpdateEmployee&quot; datasource=&quot;cfdocexamples&quot;> UPDATE Employee SET FirstName = '#Form.Firstname#', LastName = '#Form.LastName#', Dept_ID = #Form.Dept_ID#, StartDate = '#left(Form.StartDate,19)#', Salary = #Form.Salary# WHERE Emp_ID = #Form.Emp_ID# </cfquery> <h1>従業員が更新されました</h1> <cfoutput> 従業員データベースで #Form.FirstName# #Form.LastName# の情報を更新しました。 </cfoutput> </body> </html>
    <html> 
    <head> 
    <title>従業員の更新</title> 
    </head> 
    <body> 
    <cfif not isdefined(&quot;Form.Contract&quot;)> 
    <cfset form.contract = &quot;No&quot;> 
    <cfelse> 
    <cfset form.contract = &quot;Yes&quot;> 
    </cfif> 
    
    <! ---cfquery では、Acess から取得する際に日付形式を設定する必要があります。Access データベースから最初に表示された日付の &quot;.0&quot; をトリミングするには、left 関数を使用します。---> 
    <cfquery name=&quot;UpdateEmployee&quot; datasource=&quot;cfdocexamples&quot;> 
    UPDATE Employee 
    SET FirstName = '#Form.Firstname#', 
    LastName = '#Form.LastName#', 
    Dept_ID = #Form.Dept_ID#, 
    StartDate = '#left(Form.StartDate,19)#', 
    Salary = #Form.Salary# 
    WHERE Emp_ID = #Form.Emp_ID# 
    </cfquery> 
    
    <h1>従業員が更新されました</h1> 
    <cfoutput> 
    従業員データベースで 
    #Form.FirstName# #Form.LastName# 
    の情報を更新しました。
    </cfoutput> 
    </body> 
    </html>
  2. このページを保存します。

  3. ページ URL および従業員 ID を指定して、"update_form.cfm" を web ブラウザーで表示します。たとえば、*http://localhost/myapps/update_form.cfm?Emp_ID=3 のように入力します。*

  4. いずれかのフィールドに新しい値を入力し、「情報の更新」をクリックします。ColdFusion は、新しい値を使用して「従業員」テーブル内のレコードが更新され、確認メッセージを表示します。
    cfquery  タグによって、Microsoft Access データベースから日付情報が取得されると、次のように日付と時刻が 0.1 秒単位で表示されます。

ヘルプをすばやく簡単に入手

新規ユーザーの場合