<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記事 バックナンバー目次]