演習 2: SQL INSERT ステートメントによる旅行の追加

レッスン 8: ブラウズ機能と検索機能の実装では、データを収集する Trip Edit ページを作成しました。今回は、Trip Edit のアクションページを修正して、データをデータベースに挿入します。SQL データベース内にデータを挿入する方法は、次の 2 つです。

この演習では、SQL INSERT ステートメントを使用します。

これまでのレッスンでは、Compass Travel データベースの Trips テーブルから、SQL の SELECT ステートメントでデータを取り出し、DELETE ステートメントでデータを削除していました。SQL を使用してデータベースに旅行を追加するには、SQL の INSERT ステートメントのシンタックスを理解する必要があります。

SQL の INSERT ステートメントにより、リレーショナルテーブルに新しい行が挿入されます。SQL INSERT ステートメントの形式は次のとおりです。

INSERT INTO table_name
VALUES (value1, value2,....)

たとえば、Client という名前のデータベーステーブルには、次の行で示した人物に関する情報が含まれています。

LastName FirstName Address City

Tom

Jones

12 State St

Boston

Peter

Green

1 Broadway

New York

テーブルにレコードを追加するには、次のステートメントを使用します。

INSERT INTO Clients
VALUES ('Smith', 'Kaleigh', '14 Greenway', 'Windham')

データベース管理システムによってこのコードが処理されると、テーブルには次の行が含まれます。

LastName FirstName Address City

Tom

Jones

12 State St

Boston

Peter

Green

1 Broadway

New York

Smith

Kaleigh

14 Greenway

Windham

テーブルに挿入される値が、ステートメントにおいて引用符 (') で囲まれている点に注意してください。SQL では、テキストや日付の値はすべて引用符で囲む必要がありますが、数値は例外です。

また、データを挿入する列を指定することもできます。この方法により、特定の列にだけデータを挿入して、その他を省略できます。この方法を実行する場合、次のシンタックスを使用します。

INSERT INTO table_name (column1, column2,...)
VALUES (value1, value2,....)

たとえば、住所が不明な Windham の Kaleigh Smith を追加するには、名前の付いた列を使用する方法を用います。

INSERT INTO Clients (LastName, FirstName, City)
VALUES ('Smith', 'Kaleigh', 'Windham')

cfquery タグを使用して、ColdFusion から SQL を実行します。cfquery タグによって、SQL ステートメントがデータソースに渡されます。レッスン 2: 開発環境の設定で説明したとおり、データソースには、指定のデータ供給源 (リレーショナルデータベース管理システムなど) への接続に関する情報が保存されています。レッスン 2 で確立したデータソースには、Compass Travel データベースへのアクセスに関する情報を保管しています。そのデータソース名は "CompassTravel" です。

SQL INSERT ステートメントと cfquery タグを使用してデータを追加するには :

  1. my_app ディレクトリの "tripeditaction.cfm" ファイルを開きます。
  2. ファイルの最後の近くにある <cfif isOk EQ "Yes"> というタグを探します。<H1>Trip Added</H1> 行の後に、次の表で示されているコードを追加して、フォーム変数から Trips テーブルにデータを挿入します。
    対象 コード

    MS Access を使用している Windows ユーザー

    <!--- Compass Travel データベースに新規の旅行レコード
       を挿入。 --->
    <cfquery name="AddTrip" datasource="compasstravel">
       INSERT INTO Trips (tripName, eventType, tripDescription,
          tripLocation,departureDate, returnDate, price, tripLeader,
          photo, baseCost, numberPeople, depositRequired)
       VALUES ( '#Form.tripName#', #Form.eventType#,
          '#Form.tripDescription#',
          '#Form.tripLocation#','#Form.departureDate#',
          '#Form.returnDate#',
          #Form.price#,'#Form.tripLeader#', '#Form.photo#',
          #Form.baseCost#, #Form.numberPeople#, '#Form.depositRequired#')
    </cfquery>
    

    PointBase を使用している UNIX ユーザー

    <!--- Compass Travel データベースに新規の旅行レコード
       を挿入。 --->
    <!--- ローカル変数を使用して、日付表示を
       入力形式 (mm/dd/yyyy) から JDBC 形式 (yyyy-mm-dd) へ変換。 --->
    <cfset JDBCdepartureDate = #Right(Form.departureDate,4)#
       & "-" & #Left(Form.departureDate,2)# & "-"
       & #Mid(Form.departureDate,4,2)#> 
    <cfset JDBCreturnDate = #Right(Form.returnDate,4)# & "-"
       & #Left(Form.returnDate,2)# & "-"
       & #Mid(Form.returnDate,4,2)#> 
    <cfquery name="AddTrip" datasource="CompassTravel">
       INSERT INTO Trips (tripName, eventType,
       tripDescription, tripLocation,
          departureDate, returnDate, price, tripLeader, photo,
          baseCost, numberPeople,   depositRequired)
      VALUES ( '#Form.tripName#', #Form.eventType#, '#Form.tripDescription#',
          '#Form.tripLocation#', Date'#JDBCdepartureDate#',
          Date'#JDBCreturnDate#',
          #Form.price#,'#Form.tripLeader#', '#Form.photo#',
          #Form.baseCost#, #Form.numberPeople#, '#Form.depositRequired#')
    </cfquery>
    
  3. ファイルを保存します。

編集されたコードをテストするには :

  1. ブラウザで "tripedit.cfm" ページを開きます。
  2. "tripedit.cfm" ページのフィールドに次の表の値を入力し、[Save] をクリックします。
    フィールド

    Trip Name

    NH White Mountains

    Event Type

    Mountain Climbing

    Trip Description

    Climb the 5 highest peaks in the New Hampshire White Mountains.

    Trip Location

    Northeastern New Hampshire

    Departs

    05/01/2005

    Returns

    05/10/2005

    Number of People

    15

    Price

    1200

    Base Cost

    600

    Deposit Required

    Yes

    Trip Leader

    Tom Finn

    Photo File Name

    whitemountains.jpg

    新規の旅行がデータベースに保存されると、「You have added NH White Mountains to the trips database.」というメッセージが表示されます。

  3. 旅行が保存されていることを確認するには、my_app ディレクトリにある "tripsearchform.cfm" をブラウザで表示します。
  4. 「Trip Search」ページの [Trip Location] ドロップダウンリストで [Begins With] を選択し、テキストボックスに「Nor」という値を入力します。
  5. [Search] をクリックします。

    TripResults ページが表示されます。

  6. [NH White Mountains] をクリックして、先ほど追加した旅行の詳細を表示します。すべてのフィールドが正しく保存されていることを確認します。
  7. 演習 3: cfinsert タグによるデータの追加」でこの演習の手順の一部を再利用できるよう、[Delete] ボタンをクリックしてこのレコードを削除します。

コードの確認

次の表で、ColdFusion がデータを追加するために使用する SQL の INSERT ステートメントと cfquery コードを示します。

コード 説明
<cfquery name="AddTrip"
datasource="CompassTravel">

datasource 属性を使用すると、cfquery タグがデータソース CompassTravel に接続し、name 属性で指定した結果セットを返します。

INSERT INTO Trips (TripName,
EventType, tripDescription,
tripLocation, departureDate,
returnDate, price, tripLeader,photo,
baseCost, numberPeople,
depositRequired) VALUES ( '#Form.TripName#',
#Form.EventType#,
'#Form.tripDescription#',
'#Form.tripLocation#',
'#Form.departureDate#',
'#Form.returnDate#', #Form.price#,
'#Form.tripLeader#', '#Form.photo#',
#Form.baseCost#, Form.numberPeople#,
'#Form.depositRequired#)

SQL の INSERT ステートメントで、Trips テーブルに挿入するデータを指定します。テーブルの列名は、個々の名前をカンマで区切り、全体を括弧で囲みます (TripName, EventType....)。これをテーブル名 Trips の後に指定します。

VALUES というキーワードは、ステートメントの前半で指定した列と同じ順序で、列に挿入される値のリストを示しています。

これらの数値は、データ入力フォームからアクションページに渡されるフォーム変数です。変数は、たとえば #Form.baseCost# のように、# 記号で囲みます。さらに、列のデータタイプが文字列のデータタイプと一致する場合、#Form.TripName#' のように、引用符 (') で数値を囲みます。

SQL と cfquery タグを使用してデータベースにデータを追加する方法については、『ColdFusion MX 開発ガイド』を参照してください。SQL の詳細については、SQL の手引書を参照してください。


ColdFusion MX 7 | ColdFusion MX 6.1 | ColdFusion MX* | ColdFusion 5* | フォーラム* | デベロッパーセンター | サポート情報 | バグ報告

バージョン7

 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート

現在のページ: http://livedocs.adobe.com/coldfusion/7_jp/htmldocs/db_main3.htm