1.4 データベースにアンケート回答データを格納する
■テーブルにデータを追加する
リスト1.6 add.asp
<% Option Explicit %>
<HTML>
<HEAD>
<TITLE>add.asp</TITLE>
</HEAD>
<BODY>
<%
Const FOR_DEBUG = "<BR>Debug(add.asp): "
Const DATASOURCE = "aspZADO"
Dim intQ1,intQ21,intQ22,intQ23,intQ24,strQ24,strQ3
Dim objConn,objRst
intQ1 = Request("Q1")
intQ21 = Request("Q21")
intQ22 = Request("Q22")
intQ23 = Request("Q23")
intQ24 = Request("Q24")
strQ24 = Request("Q24txt")
strQ3 = Request("Q3")
Response.Write FOR_DEBUG & "intQ1=" & intQ1 & "<BR>"
Response.Write FOR_DEBUG & "intQ21=" & intQ21 & "<BR>"
Response.Write FOR_DEBUG & "intQ22=" & intQ22 & "<BR>"
Response.Write FOR_DEBUG & "intQ23=" & intQ23 & "<BR>"
Response.Write FOR_DEBUG & "intQ24=" & intQ24 & "<BR>"
Response.Write FOR_DEBUG & "strQ24=" & strQ24 & "<BR>"
Response.Write FOR_DEBUG & "strQ3=" & strQ3 & "<BR>"
'データベースにデータを格納する
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open DATASOURCE
Set objRst = Server.CreateObject("ADODB.Recordset")
objRst.Open "tblQuestion", objConn, 3,2
objRst.AddNew
objRst.Fields("Q1") =intQ1
objRst.Fields("Q21") =intQ21
objRst.Fields("Q22") =intQ22
objRst.Fields("Q23") =intQ23
objRst.Fields("Q24") =intQ24
objRst.Fields("Q24txt") =strQ24
objRst.Fields("Q3") =strQ3
objRst.UpDate
<%= "データを1件追加しました<BR>" %>
objRst.Close
objConn.Close
%>
</BODY>
</HTML>
リスト1.6を実行する前に、リスト1.2の09行目を
09 <FORM ACTION="receive.asp" METHOD="post">
から
09 <FORM ACTION="add.asp" METHOD="post">
に変更しておきます。
図1.6
■テーブル内容の確認
データベースdbTest内のテーブルtblQuestionの内容を確認してみます。
Access2000を起動し、データベースdbTestを開き、テーブルtblQuestionを開きます。今、追加したオンライン・アンケートの回答データが新しいレコードとして追加されています。
図1.7
■objRst.Fields()の省略形
objRst.Fields()はobjRst()と".Fields"の部分を省略して記述することができます。
リスト1.6の該当部分は、次のように簡単化できます。
リスト1.7 add2.asp(一部)
objRst.AddNew
objRst("Q1") =intQ1
objRst("Q21") =intQ21
objRst("Q22") =intQ22
objRst("Q23") =intQ23
objRst("Q24") =intQ24
objRst("Q24txt") =strQ24
objRst("Q3") =strQ3
objRst.UpDate
■最も簡潔なプログラミング
アンケート・ページから受信したデータをいちいち変数に格納せずに、直接データベースに格納することができます。
objRst("フィールド名") = Request("フォームの名称")
というように記述します。この記述法によれば、リスト1.6はリスト1.8のようになります。
リスト1.8
<%@ LANGUAGE="VBScript" %>
<% Option Explicit %>
<HTML>
<HEAD>
<TITLE>add3.asp</TITLE>
</HEAD>
<BODY>
<%
Const FOR_DEBUG = "<BR>Debug(add3.asp): "
Const DATASOURCE = "aspZADO"
Dim objConn,objRst
Response.Write FOR_DEBUG & "intQ1=" & Request("Q1") & "<BR>"
Response.Write FOR_DEBUG & "intQ21=" & Request("Q21") & "<BR>"
Response.Write FOR_DEBUG & "intQ22=" & Request("Q22") & "<BR>"
Response.Write FOR_DEBUG & "intQ23=" & Request("Q23") & "<BR>"
Response.Write FOR_DEBUG & "intQ24=" & Request("Q24") & "<BR>"
Response.Write FOR_DEBUG & "strQ24=" & Request("Q24txt") & "<BR>"
Response.Write FOR_DEBUG & "strQ3=" & Request("Q3") & "<BR>"
'データベースにデータを格納する
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open DATASOURCE
Set objRst = Server.CreateObject("ADODB.Recordset")
objRst.Open "tblQuestion", objConn, 3,2
objRst.AddNew
objRst("Q1") =Request("Q1")
objRst("Q21") =Request("Q21")
objRst("Q21") =Request("Q22")
objRst("Q21") =Request("Q23")
objRst("Q21") =Request("Q24")
objRst("Q24txt") =Request("Q24txt")
objRst("Q3") =Request("Q3")
objRst.UpDate
%>
データを1件追加しました<BR>
<%
objRst.Close
objConn.Close
%>
</BODY>
</HTML>
■長さ0の文字列はテキストフィールドには格納できない
たとえば、図1.8のアンケート回答を送信してみます。
図1.8
すると、図1.9のように、"フィールド 'tblQuestion.Q24txt' には、長さ 0 の文字列を格納できません。" というエラーメッセージが表示されます。
図1.9
エラーが発生したのは、45行目で、実際はその前の43行目の
objRst("Q24txt") =strQ24
で、strQ24が長さ0の文字列でないかどうかあらかじめチェックする必要があります。そこで、
If Len(strQ24) > 0 Then objRst("Q24txt") = strQ24
とします。同様に、次の44行目も
If Len(strQ3) > 0 Then objRst("Q3") = strQ3
とします。このように修正したファイルをadd4.aspとします。
再度、図1.8のようにアンケート回答を送信すると、今度は正常にテーブルにデータが格納されます。
図1.10
テーブルtblQuestionの内容を表示すると、今送信したデータが図1.11のように正常に格納されていることがわかります。
図1.11