SQL Server実践的入門(第3回)

SQL Serverへのデータ書き込みプログラム  

横田 秀次郎


データ収納テーブルの準備  


 これまでの演習で作成したcqtest_dbの中に,表1に示すテーブルを作成することにしましょう.DSNは前回作成したものがそのまま使用できます.

hyou2 (2).gif (3952 バイト)

 図1に示したように,エンタープライズマネージャでこのテーブルを作成します.

Image259 (2).gif (14084 バイト)


 会員番号にはNULL値を許さず,主キー制約を設定しました.さらにIDENTITY列として設定しましたので,自動的に番号が付けられます.生年月日のデータ型はあえて日付型は使用せずに文字型としました.

2. データ入力のためのHTMLファイル

 データ入力画面はHTML 2.0から存在するFORMタグを使用して作成します.
 FORMタグはHTMLファイルの中で書き込みフォームを記述するためのタグで,ページ上の空白枠に文字を入力したり,いくつかの選択肢から選択したり,ボタンで選択肢を決めた後,それらの情報をサーバー側に送るために作られた仕組みです.なお,このホームページはASP方式ではなく,HTML方式で十分です.
 テーブル「会員名簿」のためのデータ入力画面(図2)を形成するHTMLファイルをリスト1として示します.
 図2とリスト1により,入力データがどのようにしてサーバーへ送られるかを説明します.

<リスト1>  図1のフォーム画面を形成するHTMLファイル(data_input.htm)
<HTML>
<HEAD>
<TITLE>SQL Serverに書き込むホームページのサンプル 入力画面</TITLE>
</HEAD>
<BODY>
<H2>[ 会員名簿 データ入力画面 ]</H2>
<H4><FORM ACTION="/scripts/会員名簿.asp" METHOD="post">氏名 
<INPUT TYPE="text" NAME="氏名" SIZE="26"><BR>性別 
<INPUT TYPE="radio" NAME="性別" VALUE="男" CHECKED="true">男
<INPUT TYPE="radio" NAME="性別" VALUE="女">女<BR>生年月日(例)昭28年4月13日
<INPUT TYPE="text" NAME="生年月日" SIZE="20"><BR>郵便番号(例)271-0044 
<INPUT TYPE="text" NAME="郵便番号" SIZE="10"><BR>住所 
<INPUT TYPE="text" NAME="住所" SIZE="46"><BR>電話番号(例)0473-47-5741 
<INPUT TYPE="text" NAME="電話番号" SIZE="24"><BR>趣味 
<INPUT TYPE="text" NAME="趣味" SIZE="50"></H4><H4 align="center">
<INPUT TYPE="SUBMIT" VALUE="登録"> 
<INPUT TYPE="RESET" VALUE="リセット"></H4>
</BODY>
</HTML>
Image260 (2).gif (13857 バイト)

hyou1 (2).gif (4152 バイト)

 今回のフォームの中には6個のテキストボックスと1組のラジオボタンという入力コントロール(入力要素)が含まれています.それぞれには名称が付けられています.この名称は変数名(フィールド名と呼ぶ場合もある)となります.  この変数に入力データが代入されてサーバー側に置かれたCGIプログラムに渡されます.VBScript変数とは別物です.なお,この変数には漢字が使用できます.
 変数名はリスト1のHTMLファイルの中で指定されていますが,それをリストアップして示してみましょう.
 テキストボックスではキー入力データが変数に収納されます.ラジオボタンでは男が指定されているときには変数「性別」に"男",女性が選ばれているときは変数「性別」に"女"が代入されます.
 入力データはコマンドボタン[登録]が押されたときにまとめて送られます.[リセットボタン]を押すと入力済みのデータが全部クリアーされて,空白画面に戻ります.  ラジオボタンでCHECKED="true"が付された方が,立ち上がり直後のデフォルト状態で選択されるものです.ここでは男性がデフォルト指定となります.
 FORMのオプション機能METHODには,入力データの転送先CGIプログラムのURLアドレスを指定します.オプション機能にはPOSTまたはGETを設定します.POSTを指定すると入力データは別ファイルで送られ,CGIプログラムでは標準入力関数で取り込みます.
 GETを指定するとURL指定のCGIプログラム名の後ろに自動的に付加されて送られ,CGIプログラムは環境変数QUERY_STRINGの中に代入された形で受け取ります.データ量に制約がないという特徴から今では通常POSTを使います.
 TYPEにSUBMITを指定すると送信指令ボタン,RESETを指定するとリセットボタンになりますが,ボタンの表示名はVALUEに設定するデータで自由に変えられます. ASPによるやさしいCGIプログラムの作成  ASP方式のCGIプログラムが登場するまでは,次のような各種方式のCGIプログラムが使用されました.

(1) 各種スクリプト言語
(2) C言語
(3) Visual Basic
(4) ISAPIインターフェースを利用したDLL型プログラム
(5) IDCおよびHTXファイルを利用したデータベースコネクター

 最後にマイクロソフト社がこれが本命主力製品として出してきたのがActive Server Pages(ASP)と呼ばれるCGIプログラムで高級言語感覚で作成できる技術であり,この技術を使い作成されるCGIプログラムは拡張子がASPとなるファイルです.この技術に関する全般的技術解説は本誌の創刊号でのASP特集を参照いただくとして,今回は基本構文を具体的な紹介します.

核となる部分
 まず,今回のプログラムに直接関連した要点を説明します.
(1) ASPプログラムでの入力データの取り込み
 データベースコネクター方式を除いては,まとめて送られてくるフォーム入力データを分解再生するのが面倒でしたが,ASP方式ではRequestオブジェクトを利用し,VBScriptsで簡単に処理することができます.
 POST属性が使われているときはFormコレクションを,GET属性が使用されているときはQuryStringコレクションを使用します.
 これは具体的な例を見れば分かります.
(2) SQL Serverへのテーブルデータの書き込み
  取り込んだ書き込みデータはADOを利用して,VBScriptsプログラムでSQL Serverに対して書き込みます.これについては今回紹介した構文を,まず覚えてください.

プログラムの部分
 ASP方式のCGIプログラムをリスト2に示します.読みやすくするために説明はリスト中に併記する形で記載しました.

-----<リスト2>  SQL Serverへデータを書き込むASPプログラム
<HTML>
<HEAD>
<TITLE>SQL Serverへの登録結果連絡画面</TITLE>
</HEAD>
<BODY>
<H2>SQL サーバへの登録結果を連絡します.</H2>
<%' まず,RequestオブジェクトのFormコレクションを使用し,フィールドデータを
' 取り込み,各VBScript変数に代入し,VBScriptプログラムで取り扱えるようにします.
' なお,この変数名には漢字は使用できません.
name=Request.Form("氏名")   seibetu=Request.Form("性別")birthday=Request.Form("生年月日")ybangou=Request.Form("郵便番号")address=Request.Form("住所")tel=Request.Form("電話番号")hobby=Request.Form("趣味")
' 各変数に代入されたデータを挿入SQL文として組み上げて,文字列変数に代入する.Qstring="insert into 会員名簿 (氏名,性別, 生年月日, 郵便番号, 住所, 電話番号, 趣味)" _ +"values('"+name+"','"+seibetu+"','"+birthday+"','"+ybangou _+"','"+address+"','"+tel+"','"+hobby+"')"%>サーバ側で実行されたデータ書き込みSQL文を参考までにお知らせいたします。<br>
<!-- 参考までに組み上げたSQL文を画面に表示します.-->
[<%=Qstring %>]<p><%
' ADOを使用し,SQLデータベースと接続し,データを書き込む.
' コネクションオブジェクトの作成
set Conn = Server.CreateObject("ADODB.Connection")
' システムDSNを使用し,データソースとの接続を確立
' 連載1回目のものより,スリムなパラメータの与え方になっています.
Conn.Open "DSN=cqtest_ds","sa"
' Connectionオブジェクトから直接SQL文を実行する.' QstringにはSQL文が代入されている.
' 書き込みに施工すると変数RecordAffectedに1が代入されて戻る.
Set Rs=Conn.Execute(Qstring,RecordAffected)%><H2><% if RecordAffected=1 then %>入力データは正常に登録されました。<% ELSE %>入力データの登録に失敗いたしました。<% END IF %></H2>
<!-- データソースとの接続を切る -->
<% Conn.Close %>
<!-- 元の画面に戻るボタンを設けた.-->
<a href="http://localhost/data_input.htm">
<H2 align="center">戻る</H2></a> <p>
</BODY>
</HTML>

 完成したプログラムのテスト  データ入力フォーム作成プログラム(data_inout.htm)をWebのルートディレクトリーへ,SQL Serverへのデータ書き込みCGIプログラム(会員登録.ASP)をscriptsディレクトリーへ置いて,Webブラウザーでdata_input.htmを指定すると図3の画面が得られます.

Image261 (2).gif (14300 バイト)

 この画面で登録データを入力し,登録ボタンを押すと図4の画面が得られます.書き込まれたデータを直接覗くにはHelpDeskのQ154(1998年5月号)で紹介した各種ツールがあります.

Image262 (2).gif (15056 バイト)


 狙い通りの結果が得られています.SQL文はデータベース処理系プログラムにより異なりますが,SQL Serverについての基本的構文は本誌HelpDesk Q245(1998年8月号)を参照願います.
 今回の構文を基本型として,SQL文を変えると,書き込み以外の変更あるいは削除プログラムとなります.

まとめ
 入力データをVBScriptプログラムに取り込むために使用したRequestオブジェクトは,ASPの組み込みオブジェクトと呼ばれるものの一部です.組み込みオブジェクトは通常のサーバーオブジェクトより呼び出し方が簡素化されたものと理解してください.
 SQL ServerとのインターフェースはADOオブジェクトで,これからますます機能強化される将来性の高い技術です.
 ASPファイルの中ではHTML文とVBScriptプログラムを混在することが可能で,このVBScriptが各種のActiveXオブジェクトを呼び出せることが,仕掛けのすべてです.ですからASPの可能性が無限だということを今回の例題を通して理解いただきたいと思います.
 今回で基本編は終了とし,次回からはInterDevを活用し,思い切って大きくジャンプしたものにしたいと思います.


copyright 1998 横田秀次郎