[三流君] −−> [ASPで遊ぶ、失敗する] −−> [バックナンバー一覧]
−−> No.027 SQL INSERT INTO文でデータの追加

SQL INSERT INTO文でデータの追加



本文(発行内容)


<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でした。


ページフッター

ここまで、読んでいただきどうもです。目的の情報が見つかったか?少々心配しつつ、、、

三流君へ メッセージを送る

感想や質問・要望・苦情など 三流君へメッセージを送る。
返信例 XXXXさんへ
下記のフォームからメッセージを送ることができます。


あなたのお名前(ニックネーム):さん
返信は?:

アドレス:に返事をもらいたい
感想や質問↓:


(感想や質問・要望・苦情はHPで記事に載せることがあります。)

種類別のリンク や 広告など

[三流君(TOP ken3.org へ戻る)] / [ASPで遊ぶ、失敗する] / [ASP記事 バックナンバー目次]


Blogとリンク:[三流君のMemo別館]/ [ASP 三流君のソースコード置き場]/ [Ken3Video YouTubeで動画解説]
広告:

気になった ジャンル ↓を選択してください。

まぁ、基本はデータの受け取りかなぁ。
・[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記事 バックナンバー目次]


広告: