[三流君] −−> [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でした。

フィードバック

ASP系の→[掲示板]←を覗く、質問を書き込む

評価・感想

No.027を読んだ満足度(評価)は?
5満足(参考になった)
4まぁまぁ(一部参考になった)
3普通(どちらとも言えない)
2なんかなぁ(期待と違った)
1不満(読んで損した気分)
作者に感想・質問を送る場合は下記に気軽に書いてください
あなたのお名前(ニックネーム) さん

作者からの返信は、 不用 E-mail で受信したい
*質問・感想はメルマガで紹介する場合があります

三流君の主なリンク先

[アクセスランキング] [サイトマップ] [リンク先・相互リンク先など]
ASPで遊ぶ、失敗する 掲示板 バックナンバー 登録と解除
三流プログラマー 業務の愚痴 掲示板 バックナンバー 登録と解除
VBAで楽しくプログラミング 掲示板 バックナンバー 登録と解除
コンビニのオモテとウラ話 掲示板 バックナンバー 登録と解除
www.ken3.org(サイト内)から Google を利用して、

Ken3の日記(weblog) -- [広告・副収入系] [プログラマー業務の愚痴] [VBA系の話題] [ASP系の話題] [コンビニ系ネタ] [その他]

その他 宣伝広告