<SQL INSERT INTO文でデータの追加>
こんにちは、Ken3です。
データベースにアクセスできたら、当然、次はデータの追加でしょ。
SQLとか、単語も出てきたし、今回はデータの追加を
SQLのINSERT INTO文を使ってやってみます。
^^^^^^^^^^^^^^^^^^
といっても、たいしたことないのでご安心を。
/*
* 1.フォームからデータを受け取る
*/
固定のデータを書き込んでもツマラナイので、
フォームからデータを受け取ってみます。
テストで使用したデータベースの構造は、
データベース名:db026.mdbを作成。
テーブル名:TEST
フィールド
ID オートナンバー型
F_TITLE テキスト型
F_MEMO テキスト型
WriteTime 日付型
だったっけ。
タイトルとメモ、書き込み時刻は現在時刻にするか。
そんなデータを受け取るフォームは、こんな感じで作成してと、
( 詳細は、 http://www.ken3.org/backno/backno_asp02.html#5
の、[No.5 IsEmptyでデータチェック]を参照 )
開発の参考にじゃないけど、
処理を外側に出したほうが、わかり易かったりします。
-- tset027-1.asp
<%@LANGUAGE=VBScript%>
<html>
<head>
<title>データ受け取りのテスト</title>
</head>
<body>
<h2>データ受け取りのテスト</h2>
test027-1.asp<br>
<hr>
<% '頭で、入力パラメーターがあるかチェックする
if IsEmpty(Request.Form("TITLE")) = True Then
'そのまま下のHTMLを実行
%>
<br>
データを入力して、送信ボタンを押してください。<br>
<FORM ACTION="test027-1.asp" METHOD="POST">
タイトル:
<INPUT TYPE="text" SIZE="20" NAME="TITLE" VALUE="タイトル〜">
<br>
メモ:
<INPUT TYPE="text" SIZE="80" NAME="MEMO" VALUE="好きな文字を入れてください">
<br>
<INPUT TYPE="submit" VALUE="送 信">
<INPUT TYPE="reset" VALUE="クリア">
</FORM>
<% 'データが入力されていたら、
else
'書き込み関数を呼ぶ(外側に出したかったので)
Call TEST_WRITE(Request.Form("TITLE"), Request.Form("MEMO"))
end if 'If文もここで終わり
%>
<HR>
終了です。なんか変だけど<br>
<% Call OUT_SRC("") 'ソースの表示関数を呼ぶ %>
</body>
</html>
<% 'データを受け取り、DBへ書き込むつもり
Sub TEST_WRITE(strTITLE, strMEMO)
'今は、ただデータを表示、ここに処理を書く
Response.Write "[" & strTITLE
Response.Write "]とタイトルを受け取りました<br>メモは、["
Response.Write strMEMO
Response.Write "]ですね<br>"
End Sub
%>
ポイントは、
<% 'データを受け取り、DBへ書き込むつもり
Sub TEST_WRITE(strTITLE, strMEMO)
'今は、ただデータを表示、ここに処理を書く
Response.Write "[" & strTITLE
Response.Write "]とタイトルを受け取りました<br>メモは、["
Response.Write strMEMO
Response.Write "]ですね<br>"
End Sub
%>
とデータ書き込み関数の入り口まで作りました。
これで、データが来ていることがわかるので、
書き込み関数に集中できます。
/*
* 2.さて、書き込みますか
*/
テストは、
http://www.ken3.org/cgi-bin/test/test027-2.asp
で、できます。
-- test027-2.asp
<%@LANGUAGE=VBScript%>
<html>
<head>
<title>SQL INSERT INTO文を使用する</title>
</head>
<body>
<h2>SQL INSERT INTO文を使用する</h2>
test027-2.asp<br>
<hr>
<% '頭で、入力パラメーターがあるかチェックする
if IsEmpty(Request.Form("TITLE")) = True Then
'そのまま下のHTMLを実行
%>
<br>
データを入力して、送信ボタンを押してください。<br>
<FORM ACTION="test027-2.asp" METHOD="POST">
タイトル:
<INPUT TYPE="text" SIZE="20" NAME="TITLE" VALUE="タイトル〜">
<br>
メモ:
<INPUT TYPE="text" SIZE="80" NAME="MEMO" VALUE="好きな文字を入れてください">
<br>
<INPUT TYPE="submit" VALUE="送 信">
<INPUT TYPE="reset" VALUE="クリア">
</FORM>
<% 'データが入力されていたら、
else
'書き込み関数を呼ぶ(外側に出したかったので)
Call TEST_WRITE(Request.Form("TITLE"), Request.Form("MEMO"))
end if 'If文もここで終わり
%>
<HR>
終了です。<br>
<A href="test026-1.asp">test026-1.asp db026.mdb内のデータを確認する</a>
</body>
</html>
<% 'データを受け取り、DBへ書き込むつもり
Sub TEST_WRITE(strTITLE, strMEMO)
'ADO DB Connection オブジェクトを作成する、英文そのままじゃん
Set db=Server.CreateObject("ADODB.Connection")
'.Provider?プロバイダー?通信会社?じゃなくって
'データアクセスにはJet.OLEDB.4.0を使うことを設定
db.Provider = "Microsoft.Jet.OLEDB.4.0"
'次に、接続DBの位置を渡すので、Server.MapPathで変換して渡す
db.ConnectionString = Server.MapPath("db026.mdb")
'やっとデータベースを開ける
db.open
'SQL文を作る
strSQL = "INSERT INTO TEST (F_TITLE, F_MEMO, WriteTime) VALUES ("
strSQL = strSQL & "'" & strTITLE & "'" 'タイトル
strSQL = strSQL & ",'" & strMEMO & "'" 'メモ
strSQL = strSQL & ", #" & now & "#)" '現在時刻、日付型は#で囲む
'SQL文を発行
db.Execute(strSQL)
'オマケで画面にデータ表示
Response.Write "<HR>strSQL=[" & strSQL & "]を発行しました<HR>"
'データベースも閉じようよ
db.Close
'お行儀よくオブジェクトも開放しましょう(通常は自動的に解放されるけど)
Set db = Nothing
End Sub
%>
なんか、長いよね、ポイントは。
データベースへのアクセス準備
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
'ADO DB Connection オブジェクトを作成する、英文そのままじゃん
Set db=Server.CreateObject("ADODB.Connection")
'.Provider?プロバイダー?通信会社?じゃなくって
'データアクセスにはJet.OLEDB.4.0を使うことを設定
db.Provider = "Microsoft.Jet.OLEDB.4.0"
'次に、接続DBの位置を渡すので、Server.MapPathで変換して渡す
db.ConnectionString = Server.MapPath("db026.mdb")
'やっとデータベースを開ける
db.open
お約束じゃないけど、上記のような感じで、前回なんとか接続しました。
( 詳細は、 [No.26 MDBファイルにアクセスしてみたADODB.Connection]を参照 )
SQL文を作成する
^^^^^^^^^^^^^^^^^^
'SQL文を作る
strSQL = "INSERT INTO TEST (F_TITLE, F_MEMO, WriteTime) VALUES ("
strSQL = strSQL & "'" & strTITLE & "'" 'タイトル
strSQL = strSQL & ",'" & strMEMO & "'" 'メモ
strSQL = strSQL & ", #" & now & "#)" '現在時刻、日付型は#で囲む
何やってるか?文字列作ってます。
何の?
SQLのINSERT文の文字列で、
INSERT INTO テーブル名 (フィールド1,フィールド2...)
VALUES (値1,値2...)
といった、単純な文字列なんです。
*SQL の INSERT INTO文も奥が深いんですよ。。。
strSQL = strSQL & "'" & strTITLE & "'" 'タイトル
strSQL = strSQL & ",'" & strMEMO & "'" 'メモ
と、少し変な書き方だけど、&でつなげて書いてます。
文字列は’’のシングルコーテーションで囲って、
日付型は##で囲ってます。
数値はそのまま3とか何もしないでOKです。
SQL文を発行
^^^^^^^^^^^^^^
'SQL文を発行
db.Execute(strSQL)
.ExecuteでSQL文を発行します。
中身がINSERT INTO文の文字列なので、挿入処理されます。
次回以降に出てくるDelete文もこれで発行します。
'オマケで画面にデータ表示
Response.Write "<HR>strSQL=[" & strSQL & "]を発行しました<HR>"
確認でSQL文を表示してみました。
後始末
^^^^^^
'データベースも閉じようよ
db.Close
'お行儀よくオブジェクトも開放しましょう(通常は自動的に解放されるけど)
Set db = Nothing
と、これもお約束になってきましたね。
/*
* 3.終わりの挨拶
*/
今回は、
・フォームでデータを受け取り
・SQLのINSERT INTO文を使用して、
データを追加してみました。
覚えてしまえば、
テキストファイルに書いてた時とあまり変わらないですね。
素朴な疑問あったら、気軽に、
メール、掲示板に書き込んでくださいね。
ASP、VBScript勉強中の三流プログラマーのKen3でした。
ここまで、読んでいただきどうもです。目的の情報が見つかったか?少々心配しつつ、、、
感想や質問・要望・苦情など 三流君へメッセージを送る。

下記のフォームからメッセージを送ることができます。
[三流君(TOP ken3.org へ戻る)]
/ [ASPで遊ぶ、失敗する]
/ [ASP記事 バックナンバー目次]
まぁ、基本はデータの受け取りかなぁ。
・[Form等を使用したデータのやり取り]・・・ASPと言っても、HTMLの入力フォームからデータを受け取ります。POSTやGETでやりとりを押さえますか。
次は、データの入出力 で ADOを使った(ADOで接続) と SQLの解説を少々
・[ADOでMdbファイルを使う]・・・MDBと接続して、簡単な追加・更新・削除を行った。
・[ADOでExcelと接続してみた]・・・.xlsと接続してSQLを使ってみた。
・[ADOでCSVと接続してみた]・・・.CSV テキストを読み出した。※更新・削除はできません
広告:
DBが使えるので、あまり使用しないけど、普通のテキストファイル処理
・[テキストファイル処理]・・・ファイルを開いて、書き込む。1行読み込みなどを軽く
VBScriptでFormat関数が無いなど、微妙にVBAと違うけど
[VBScript関数関係の説明]・・・少し、処理を書いてみた。
[その他処理サンプル]・・・あまり良いサンプル作れなかったけど。。。
何かの参考となれば幸いです。
[三流君(TOP ken3.org へ戻る)]
/ [ASPで遊ぶ、失敗する]
/ [ASP記事 バックナンバー目次]