三流君ASPで遊ぶ、失敗する

[三流君] Top ken3.orgへ
[ASP解説] ASPの解説TOP
[ASP記事 バックナンバー] 番号順のバックナンバー
[SOHO/在宅プログラマー/派遣] 派遣のお話ほか
[...サイトマップ(総合案内へ)]




分類別ガイド
ADOで[ADO Mdb接続] ,[ADO Excel接続] ,[ADO CSV接続]

[ASP Form データのやりとりPOSTとGET]
[ASPでTextFile操作]
[ASPでVBScriptを使う]
[その他サンプル]

バックナンバー No.25 〜 No.29


No.25 2002/12/25
復習兼ねてHTMLソースを変換するツールの作成
[ページTOPへ戻る]
<復習兼ねてHTMLソースを変換するツールの作成>

こんにちは、Ken3です。

そろそろDBやれよ、、、
と要望の声が聞こえてくる今日この頃いかがお過ごしですか?
(そんなこと、ダレもいってないって?)
今回は、今までの復習を兼ねて、
HTMLソースを変換するツールを作成してみます。
なんて言ってるけど、たいしたことないのでご安心を。

/*
 * 1.機能、初めは簡単シンプルに
*/

ホームページ上にHTMLのソース載せるのって、
メモ帳でちまちま作成している私は、
手間かかってます。

<PRE>のタグで楽してるんだけど、
<html>を&lt;html&gt;と変換したりしなければならなくて、
いつもエディターの変換機能で<と>を2回置換して作成してます。

まず、この作業を無くしたいです。

次にやりたいのが、
ASPの<%〜%>で囲まれた部分をわかりやすく、
青色にしたいです。
*ソースの表示プログラムでは、青になってるのに、
 バックナンバーでは、黒のままなので。

やりたいことを整理すると、
・<>を置換えたい、
・<%〜%>で囲まれたASPのソースを青にしたい
の2点です。

/*
 * 2.データ遷移
*/
やりたいことが決まったので、
次はデータの流れを考えます。

えっと、
入力はメルマガ文章でHTMLのタグが中に入ってると
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
出力は、<>などを置換え、文章中のASP<%〜%>で囲まれた部分の色を変える
結果のHTMLソースを画面に出力ですね。
~~~~~~~~~~~~~~~~~~~~~~

いつものパターンで、
test025.html でフォームの入力
test025-1.asp で変換処理と出力にしますか。

/*
 * 3.入力フォームの作成
*/

入力フォーム、いままで、いろいろと作ってきたなぁ。
複数行の入力を行うので、
<TEXTAREA ROWS=XX COLS=XX NAME="XXXXX">
</TEXTAREA>
を使用するか。
入力項目は一つでさびしいけど、下記のように作成しました。

-- test025.html
<html>
<head>
<title>HTMLのソースを作成する</title>
</head>
<body>
<h2>HTMLのソースを作成する</h2>
<br>
HTMLのタグ付き文章を記入して送信ボタンを押してください。<br>
タグを変換した結果が表示されます<br>
<FORM ACTION="test025-1.asp" METHOD="POST">
↓↓↓変換したい文章↓↓↓<br>
<TEXTAREA ROWS=15 COLS=80 NAME="t-moto">
ここに、文章をコピーして下さい
</TEXTAREA><br>
<INPUT TYPE="submit" VALUE="文章を変換する">
<INPUT TYPE="reset"  VALUE="クリア">
</FORM>
</body>
</html>
-------

フォームの作成
^^^^^^^^^^^^^^
<FORM ACTION="test025-1.asp" METHOD="POST">
  ・
 ・
</FORM>
で入力フォームが作成されます。
ACTION="test025-1.asp"
とデータの受け取り先を指定します。
METHOD="POST"は送信方法で、標準出力を使った方法です。
="GET"とするとURLの後ろに付けたクエリ情報で送ります。
( GETの詳細は、http://www.ken3.org/backno/backno_asp02.html#9
  のFORM ACTION="XXX.asp" METHOD="GET" を使用をみてください)

入力エリアの作成
^^^^^^^^^^^^^^^^
入力エリアは、
<TEXTAREA ROWS=15 COLS=80 NAME="t-moto">
ここに、文章をコピーして下さい
</TEXTAREA><br>
で簡単に作成しました。
<TEXTAREA>のタグを使用して、
行 ROWS=15 15行と表示を指定しているが、データはスクロールでたくさん入る
列 COLS=80 文章を貼るので大きめに
データの名前 NAME="t-moto"
と指定してます。

ボタンの作成
^^^^^^^^^^^^
フォームの動作をするボタンを2つ作りました。
<INPUT TYPE="submit" VALUE="文章を変換する">
は、押されたらデータを送信します。
<INPUT TYPE="reset"  VALUE="クリア">
は、入力データをクリアします。

入力側は物足りないけどこんな感じです。

/*
 * 4.出力側の処理
*/

フォームから送られた文章を受け取って、変換処理を行います。

データの受け取りは
^^^^^^^^^^^^^^^^^^
POSTで送られてくるので、
Request.Form("項目名")
~~~~~~~~~~~~~~~~~~~~~~
で値を参照だったっけ、
( 詳細は、http://www.ken3.org/backno/backno_asp01.html#4
  の、[No.4 フォームから値を受け取りたい]を参照 )

タグの変換は
^^^^^^^^^^^^
たしか、
Server.HTMLEncode("文字列")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
で
変換結果を返してくれるんだっけ、
( 詳細は、http://www.ken3.org/backno/backno_asp04.html#17
  の、[No.7 中身を表示、Server.HTMLEncodeでソースの表示]を参照 )

ASPソースの色を変える
^^^^^^^^^^^^^^^^^^^^^^^^
これは、
Replace関数
~~~~~~~~~~~
で、
変換された&lt,&gtの前後に<Font>のタグを付けて処理しました。
strDATA = Replace(strDATA, "&lt;%", "<font color='blue'>&lt;%") '青にする
strDATA = Replace(strDATA, "%&gt;", "%&gt;</font>")     'カラー終了
こんな感じだったよね。
( 詳細は、http://www.ken3.org/backno/backno_asp05.html#21
   の、[No.21 文字列の置き換え、Replace関数を使用]を参照 )

なんだよ、過去のメルマガの紹介かよ。
で作成したのが、下記のtest025-1.aspです。

<%@LANGUAGE=VBScript%>
<html>
<head>
<title>受け取った文章をHTMLソースに変換</title>
</head>
<body>
<h2>受け取った文章をHTMLソースに変換</h2>
test025-1.asp<br>
<hr>
<%
  'まず、タグ関係を変換する
  strMOTO = Server.HTMLEncode(Request.Form("t-moto"))  'タグを変換
  '次にASPソース<%〜%>を青にする 
  strMOTO = Replace(strMOTO, "&lt;%", "<font color='blue'>&lt;%") '青にする
  strMOTO = Replace(strMOTO, "%&gt;", "%&gt;</font>")     'カラー終了
%>
<PRE><%=strMOTO%></PRE>
↑<PRE>で囲うと元のままだ<br>
あっ、当たり前か、<を変換してもそのまま表示したんじゃ
<hr>
よし、タグをさらに変換して潰してやる<br>
<%
    strMOTO = Server.HTMLEncode(strMOTO)  'タグをさらに変換
%>
<PRE><%=strMOTO%></PRE>
↑なんとかできたのかなぁ(笑)
<hr>
終了です。<br>

</body>
</html>
----

タグ関係の変換とASP部分の処理
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
<%
  'まず、タグ関係を変換する
  strMOTO = Server.HTMLEncode(Request.Form("t-moto"))  'タグを変換
  '次にASPソース<%〜%>を青にする 
  strMOTO = Replace(strMOTO, "&lt;%", "<font color='blue'>&lt;%") '青にする
  strMOTO = Replace(strMOTO, "%&gt;", "%&gt;</font>")     'カラー終了
%>
もう、関数の力を借りまくりで、ほぼそのままでした。

おいおい、表示が戻ってるよ(笑)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
<PRE><%=strMOTO%></PRE>
でそのまま結果を表示と。
あれ?
<>とかそのまま表示された。
あれ?じゃないよ三流君、だって&lt;は<だろ、そのまま表示されるって。
そっか

よし、タグをさらに変換して潰してやる
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
<%
    strMOTO = Server.HTMLEncode(strMOTO)  'タグをさらに変換
%>
<PRE><%=strMOTO%></PRE>

で、
さらに、&を&ampに変換して、
これを<PRE>で表示すると、OKです。
なんか変だよね2回も変換通すなんてね。
違うやり方ありそう。。。。

/*
 * 5.終わりの挨拶
*/

今回は、復習を兼ねて、HTML付きの文章を変換してみました。
テストは、
http://www.ken3.org/cgi-bin/test/test025.html
からできます。
遊んでみてね。

そろそろDBかなぁやはり。
イヤ、まだまだ違うネタで、、、、

素朴な疑問あったら、気軽に、
メール、掲示板に書き込んでくださいね。

ASP、VBScript勉強中の三流プログラマーのKen3でした。

No.26 2002/12/29
MDBファイルにアクセスしてみたADODB.Connection
[ページTOPへ戻る]
<MDBファイルにアクセスしてみたADODB.Connection>

こんにちは、Ken3です。

そろそろDBやれよ、、、
と要望の声が聞こえてくる今日この頃いかがお過ごしですか?
(そんなこと、ダレもいってないって?)

今回は、
やっとDB関係をやってみます。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
といっても、たいしたことないのでご安心を。

/*
 * 1.Access2000でMDBファイルを作成
*/

MDBファイルを作成するために、
今回は楽してAccess2000を使用しました。

Access2000を起動して、
データベース名:db026.mdbを作成。

下記のテーブル、フィールドを作成しました。

テーブル名:TEST
フィールド
ID        オートナンバー型
TITLE     テキスト型
MEMO      テキスト型
WriteTime 日付型


/*
 * 2.データを軽く表示してみた。
*/

ポイントは、いろいろあるけど、
まずは、接続がうまく行くかチェックしてみる。

サンプルを見ながら、
自分なりに変更して、できたソースが下記のソースです。

-- test026-1.asp
<%@LANGUAGE=VBScript%>
<html>
<head>
<title>MDBファイルにアクセスしてみる</title>
</head>
<body>
<h2>MDBファイルにアクセスしてみる</h2>
test026-1.asp<br>
<hr>
<%
  '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

  'お約束のレコードセットの作成 テーブル名TESTから全項目(*)を指定
  Set rs = db.Execute("Select * From TEST")

  'データの表示をテーブルで行う
  Response.Write "<TABLE Border='1'>"

  '見出しをバカっぽく、そのまま書き込む
  Response.Write "<TR>"
  Response.Write "<TD>ID</TD>"
  Response.Write "<TD>TITLE</TD>"
  Response.Write "<TD>MEMO</TD>"
  Response.Write "<TD>WrietTime</TD>"
  Response.Write "</TR>"

  'お約束のEOFまでループは(データが無くなるまでループ)、
  Do While rs.EOF = False   'レコードセットの.EOFがFalseの間
    Response.Write "<TR>"   '内容を表示する
    Response.Write "<TD>" & rs.Fields.Item("ID") & "</TD>"
    Response.Write "<TD>" & rs.Fields.Item("TITLE") & "</TD>"
    Response.Write "<TD>" & rs.Fields.Item("MEMO") & "</TD>"
    Response.Write "<TD>" & rs.Fields.Item("WriteTime") & "</TD>"
    Response.Write "</TR>"
    '次のレコードにポインタを移動する
    rs.MoveNext    'これを忘れると悲惨なことに、、、
  Loop

  Response.Write "</TABLE>"  'テーブルは終わりです

  '開いていたレコードセットを閉じる
  rs.Close

  'データベースも閉じようよ
  db.Close

  'お行儀よくオブジェクトも開放しましょう(通常は自動的に解放されるけど)
  Set db = Nothing

%>
<hr>
終了です。<br>

</body>
</html>
----

ADODB.Connectionオブジェクトを作成
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  'ADO DB Connection オブジェクトを作成する、英文そのままじゃん
  Set db=Server.CreateObject("ADODB.Connection")
ADOを使用してDBをイタズラするので、
Server.CreateObjectで、
"ADODB.Connection"を指定して、オブジェクトを作成してます。

Microsoft.Jet.OLEDB.4.0
^^^^^^^^^^^^^^^^^^^^^^^
  '.Provider?プロバイダー?通信会社?じゃなくって
  'データアクセスにはJet.OLEDB.4.0を使うことを設定
  db.Provider = "Microsoft.Jet.OLEDB.4.0"
ここでは、先ほど作成したdb(ADO DB Connection)
の.Provider プロパティに
"Microsoft.Jet.OLEDB.4.0"
を設定。(指定)
まぁ、なんでこの名称か?だけど、
MDBファイルを使用するので今回はこれで。
じゃ、Oracleとかだと違うの?
ですね。
プロバイダーって単語気になってコメント書いたけど気にしないでね。

DBの位置を指定する
^^^^^^^^^^^^^^^^^^^^
  '次に、接続DBの位置を渡すので、Server.MapPathで変換して渡す
  db.ConnectionString = Server.MapPath("db026.mdb")
物事には順序があって、
接続にはADO DB Connectionオブジェクトを介して、
データアクセスにはMicrosoft.Jet.OLEDB.4.0を使用します
と来たら、次はどの?データベースを使うかを、
db.ConnectionString = Server.MapPath("db026.mdb")
で指定してます。

実際に開けるのは.open
^^^^^^^^^^^^^^^^^^^^^
  'やっとデータベースを開ける
  db.open
ここまで指定して、やっと開きます。


レコードセット、SQL文を渡して作成する
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  'お約束のレコードセットの作成 テーブル名TESTから全項目(*)を指定
  Set rs = db.Execute("Select * From TEST")
SQL文、こいつも詳しく解説しないといけないんだけど、
今回は、かるく、
TESTテーブルの全てのデータをセレクトしたかったので、
Set rs = db.Execute("Select * From TEST")
としてます。
SQLの詳細は、また詳しくやりましょう。
でも、気になるのは、レコードセット?って単語だよね。
これは、オーダーしたレコードの集まりです。
Select * From TEST と無条件なので、
全てのデータがレコードセットとして返されてます。

テーブルタグを使って見出しとデータを表示する
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  'データの表示をテーブルで行う
  Response.Write "<TABLE Border='1'>"

  '見出しをバカっぽく、そのまま書き込む
  Response.Write "<TR>"
  Response.Write "<TD>ID</TD>"
  Response.Write "<TD>TITLE</TD>"
  Response.Write "<TD>MEMO</TD>"
  Response.Write "<TD>WrietTime</TD>"
  Response.Write "</TR>"
まぁ、ここは大丈夫かなぁ。
表形式で出力したかったので、こんな感じにしてみました。

データを表示
^^^^^^^^^^^^
  'お約束のEOFまでループは(データが無くなるまでループ)、
  Do While rs.EOF = False   'レコードセットの.EOFがFalseの間
    Response.Write "<TR>"   '内容を表示する
    Response.Write "<TD>" & rs.Fields.Item("ID") & "</TD>"
    Response.Write "<TD>" & rs.Fields.Item("TITLE") & "</TD>"
    Response.Write "<TD>" & rs.Fields.Item("MEMO") & "</TD>"
    Response.Write "<TD>" & rs.Fields.Item("WriteTime") & "</TD>"
    Response.Write "</TR>"
    '次のレコードにポインタを移動する
    rs.MoveNext    'これを忘れると悲惨なことに、、、
  Loop
ポイントは3つあって、
ア.rs.EOF = False
  ここで、レコードセットの行カーソルが終わりに達しているかチェックしてます。
イ.rs.Fields.Item("ID")
    単純に、rs.Fields.Item(フィールド名)で値を表示してます。
ウ.rs.MoveNext
  レコードセットの行カーソルを次の行に移動してます(レコード移動)
まぁ、よく見るパターンですよね。

後始末いろいろ
^^^^^^^^^^^^^^
  Response.Write "</TABLE>"  'テーブルは終わりです
は、忘れずにテーブルタグを閉めてます。
次に、
  '開いていたレコードセットを閉じる
  rs.Close
で、レコードセットを閉じて、
  'データベースも閉じようよ
  db.Close
データベースも閉じます。
あまけで今回は、
  'お行儀よくオブジェクトも開放しましょう(通常は自動的に解放されるけど)
  Set db = Nothing
で、オブジェクトを解放してます。
使いっぱなしでも(食事を食べただけで食器を下げなくても)
関数を抜けると(部屋を出て行くと)
オブジェクトが解放されるんだけど(自然と食器を下げてくれる)
お行儀よく、使ったものは自分で解放しました。

/*
 * 3.関連情報
*/
Microsoft Universal Data Access
http://www.microsoft.com/japan/msdn/data/default.asp
↑いろいろとドライバーの情報など載ってます。
 悪意を持ったユーザに、、、の記述を見ると、なんかドキっとしますね。
 今、私はレンタルサーバーでDB動かしてるけど、
 自分でサーバ立ち上げたら日々ビクビクするんだろうなぁ。。。

Universal Data Access Web サイト、
ADO セクションへようこそ
http://www.microsoft.com/japan/msdn/data/ado.asp

DAO から ADO への移植
Jet Provider と組み合わせた ADO の使用
http://www.microsoft.com/japan/msdn/data/techmat/ado/dao2ado.asp
↑私みたいに、DAOは少し知ってるぞって人はノゾクとわかるような、
 わからないような。

Webで情報検索が当たり前の時代になってるのかなぁ。
ISDNだけど、たまにストレスを感じる(贅沢かなぁ)

ADSLや光にしてみたいですね。
*相手のWebの反応が鈍くてあまりかわらないのか?
 それとも、ISDNとADSLだと開発ストレスも違うのか、、、
 ホントのとこを知りたいですよね。
 (ホントはエロ画像のダウンロードの速さが気になるんだろって?(爆))

/*
 * 4.終わりの挨拶
*/

今回は、
MDBファイルに軽くアクセスしてみました。
入り口にやっと着いたので、ここから飛ばして行こう
*不定期発行だから気にしなくていいんだけど、
 2・3日発行空いたのは、
 実は、ADOのつなげ方わかんなくて(やっぱ三流でした)

テストは、
http://www.ken3.org/cgi-bin/test/test026-1.asp
からできます。
ただ、データが表示されるだけなので、つまらないけど。
遊んでみてね。

素朴な疑問あったら、気軽に、
メール、掲示板に書き込んでくださいね。

ASP、VBScript勉強中の三流プログラマーのKen3でした。

No.27 2002/12/30
SQL INSERT INTO文でデータの追加
[ページTOPへ戻る]
<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でした。

No.28 2002/12/31
SQL ORDER BYでデータの並べ替え
[ページTOPへ戻る]
<SQL ORDER BYでデータの並べ替え>

こんにちは、Ken3です。

データベースにアクセスできたら、
次はデータの並べ替えでしょ。
今回はデータの並べ替え(ソート)を
SQLのORDER BYを使ってやってみます。
^^^^^^^^^^^^^^
といっても、たいしたことないのでご安心を。

/*
 * 1.やりたいこと、データを並べ直したい
*/

データベース名:db026.mdb
テーブル名:TEST
フィールド
ID        オートナンバー型
F_TITLE   テキスト型
F_MEMO    テキスト型
WriteTime 日付型

の中身を条件指定無しで表示は、
http://www.ken3.org/cgi-bin/test/test026-1.asp
で、味気ないけど出来ました。

用途に応じて、データの並び順を変えて出力したいよね。
そんなことをやりたいので、
SELECT 文の ORDER BY を使ってみます。

/*
 * 2.ORDER BY ?
*/
ORDER BY ?って何?

SQLのSELECT文で指定すると、出力結果を並べ替えてくれます。

Select * From TEST ORDER BY F_TITLE
みたいに、並べ替えを行うフィールドを指定します。

なんだぁ、意外と簡単なんだね。

タイトルで並べ替えを行ったサンプル、
http://www.ken3.org/cgi-bin/test/test028-1.asp

<%@LANGUAGE=VBScript%>
<html>
<head>
<title>ORDER BYで並べ替える</title>
</head>
<body>
<h2>ORDER BYで並べ替える</h2>
test028-1.asp<br>
<hr>
<%
  '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

  'お約束のレコードセットの作成 テーブル名TESTから全項目(*)を指定
  'ORDER BY F_TITLEを追加しただけです。
  Set rs = db.Execute("Select * From TEST ORDER BY F_TITLE")

  'データの表示をテーブルで行う
  Response.Write "<TABLE Border='1'>"

  '見出しをバカっぽく、そのまま書き込む
  Response.Write "<TR>"
  Response.Write "<TD>ID</TD>"
  Response.Write "<TD>F_TITLE</TD>"
  Response.Write "<TD>F_MEMO</TD>"
  Response.Write "<TD>WrietTime</TD>"
  Response.Write "</TR>"

  'お約束のEOFまでループは(データが無くなるまでループ)、
  Do While rs.EOF = False   'レコードセットの.EOFがFalseの間
    Response.Write "<TR>"   '内容を表示する
    Response.Write "<TD>" & rs.Fields.Item("ID") & "</TD>"
    Response.Write "<TD>" & rs.Fields.Item("F_TITLE") & "</TD>"
    Response.Write "<TD>" & rs.Fields.Item("F_MEMO") & "</TD>"
    Response.Write "<TD>" & rs.Fields.Item("WriteTime") & "</TD>"
    Response.Write "</TR>"
    '次のレコードにポインタを移動する
    rs.MoveNext    'これを忘れると悲惨なことに、、、
  Loop

  Response.Write "</TABLE>"  'テーブルは終わりです

  '開いていたレコードセットを閉じる
  rs.Close

  'データベースも閉じようよ
  db.Close

  'お行儀よくオブジェクトも開放しましょう(通常は自動的に解放されるけど)
  Set db = Nothing

%>
<hr>
終了です。<br>

</body>
</html>

ポイントは、
^^^^^^^^^^
  'お約束のレコードセットの作成 テーブル名TESTから全項目(*)を指定
  'ORDER BY F_TITLEを追加しただけです。
  Set rs = db.Execute("Select * From TEST ORDER BY F_TITLE")
変更点は、ORDER BY F_TITLEと項目名を追加しただけです。

ねっ、簡単でしょ。

/*
 * 3.あんなに苦労した逆順並べ替えも、DESCキーワード1つで、、、
*/

私がテキストファイルの処理で、逆にデータを読めない、、
と苦労した処理も、
( 詳細は、http://www.ken3.org/backno/backno_asp05.html#23 
  の、[No.23 苦肉の策、配列をリングみたく使ってみた]を参照 )

ORDER BY 句には、DESCキーワードってあって、これを指定するだけで、
データを降順でオーダーしてくれます。
Select * From TEST ORDER BY F_TITLE DESC
こんなんでOKです。

紙面のムダだけど、ソースを載せると、
<%@LANGUAGE=VBScript%>
<html>
<head>
<title>ORDER BYで並べ替え DESCで降順です</title>
</head>
<body>
<h2>ORDER BYで並べ替え DESCで降順です</h2>
test028-2.asp<br>
<hr>
<%
  '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

  'お約束のレコードセットの作成 テーブル名TESTから全項目(*)を指定
  'ORDER BY ID DESCを追加しただけです。
  Set rs = db.Execute("Select * From TEST ORDER BY ID DESC")

  'データの表示をテーブルで行う
  Response.Write "<TABLE Border='1'>"

  '見出しをバカっぽく、そのまま書き込む
  Response.Write "<TR>"
  Response.Write "<TD>ID</TD>"
  Response.Write "<TD>F_TITLE</TD>"
  Response.Write "<TD>F_MEMO</TD>"
  Response.Write "<TD>WrietTime</TD>"
  Response.Write "</TR>"

  'お約束のEOFまでループは(データが無くなるまでループ)、
  Do While rs.EOF = False   'レコードセットの.EOFがFalseの間
    Response.Write "<TR>"   '内容を表示する
    Response.Write "<TD>" & rs.Fields.Item("ID") & "</TD>"
    Response.Write "<TD>" & rs.Fields.Item("F_TITLE") & "</TD>"
    Response.Write "<TD>" & rs.Fields.Item("F_MEMO") & "</TD>"
    Response.Write "<TD>" & rs.Fields.Item("WriteTime") & "</TD>"
    Response.Write "</TR>"
    '次のレコードにポインタを移動する
    rs.MoveNext    'これを忘れると悲惨なことに、、、
  Loop

  Response.Write "</TABLE>"  'テーブルは終わりです

  '開いていたレコードセットを閉じる
  rs.Close

  'データベースも閉じようよ
  db.Close

  'お行儀よくオブジェクトも開放しましょう(通常は自動的に解放されるけど)
  Set db = Nothing

%>
<hr>
終了です。<br>
<A href="test026-1.asp">test026-1.asp db026.mdb内のデータを確認する</a><br>
<A href="test027-2.asp">test027-2.asp データを追加する</a><br>
<A href="test028-1.asp">test028-1.asp TITLEで並べ替え</a><br>

</body>
</html>

ポイントは、
^^^^^^^^^^^
  'お約束のレコードセットの作成 テーブル名TESTから全項目(*)を指定
  'ORDER BY ID DESCを追加しただけです。
  Set rs = db.Execute("Select * From TEST ORDER BY ID DESC")
と、ID DESCを追加して、
IDの降順(逆順)でレコードセットが返ってきます。

あんなに苦労したのに、こんなんでいいの?
って感じるくらい簡単ですよね。

SQL文、面白そうですか?
それとも、
なんか自分には合わない?

まぁ、相性あるけど、慣れれればなんとかなりますよ。

テストは、
http://www.ken3.org/cgi-bin/test/test028-2.asp
で、降順で表示されます。

/*
 * 4.終わりの挨拶
*/

今回は、
・ORDER BYで並べ替え(ソート)
・ORDER BY フィールド DESCで降順の並べ変え(大きい順)
データを並べ替えてみました。

覚えてしまえば、
テキストファイルに書いてた時より楽ですね。

素朴な疑問あったら、気軽に、
メール、掲示板に書き込んでくださいね。

ASP、VBScript勉強中の三流プログラマーのKen3でした。

No.29 2003/01/02
復習で一言コメント入力の処理を作る
[ページTOPへ戻る]
<復習で一言コメント入力の処理を作る>
こんにちは、Ken3です。

前回、前々回、
SQL 文を発行してMDBファイルにアクセスしました。
軽く、SELECT文、INSERT INTO文をやりました。

今回は、SQLのDELETE、UPDATEに行くと読者を思わせといて、
期待にはこたえずに、
復習で、一言コメントを受け取れる処理を作成してみたいと思います。

といっても、たいしたことないのでご安心を。

/*
 * 1.やりたいこと、感想を蓄積して、閲覧可能にする
*/

やりたいことは、HPを訪れた読者が、一言感想を書き込める。
そんなシンプルな処理をやってみたいと思います。

シンプルな、、とか、、簡単な、、とか、
日本語で書かないで、チャント仕様を書けよ。

えっと、宣伝兼ねて、
三流君の書いてるメルマガ
http://www.ken3.org/guchi/    作者の貧しい心の中が見れる愚痴系
http://www.ken3.org/vba/      VBA主にExcel/Access関係を少し
http://www.ken3.org/24h/      コンビニ関係の話を少し
http://www.ken3.org/asp/      ASP関係、Web上で少し遊んでます
と4つあります。
このASPが一番流行ってない(笑)、う〜ん、、、

4つのメルマガあるので、
どのメルマガのどの話に対しての感想か知りたいので、
VBA No.5 今回も面白くない
ASP No.7 よかったよ
と、メルマガの区分とX話、感想、日時を受け取って、
作者の私が見るだけじゃなく、読者にもオープン表示したいです。

あっそ、一言感想やると、またショック受けるよキット。
いいんです。そんな話は置いといて、
データは、

データベース名:db029.mdb
テーブル名:KANSOU
フィールド
ID        オートナンバー型
F_KUBUN   テキスト型  ASP,VBA,GUCHI,24Hと4つの区分
F_NO      整数型      0:は全体に対して、1〜はX話にする
F_MEMO    テキスト型  一言メッセージ
WriteTime 日付型      書き込み日付

こんな感じでいいかなぁ。

動作は、
データ表示部 -- test029-1.asp
ここでは、単純にデータを表示します。
また、感想を追加できるフォームを作成します。

データ追加部 -- test029-2.asp
単純に、受け取ったデータを追加します。
お礼のメッセージを表示します。

入力フォーム
各バックナンバーのHTMLに入れる。

こんな感じでOKかなぁ。

/*
 * 2.表示部を作成する
*/

単純にデータを表示するんだろ、
それと、入力フォームを作成でしょ。

-- test029-1.asp --
<%@LANGUAGE=VBScript%>
<html>
<head>
<title>コメント入力部(入力と表示)</title>
</head>
<body>
<h2>コメント入力部(入力と表示)</h2>
test029-1.asp<br>
<hr>
感想を書き込んでください。<br>
<FORM ACTION="test029-2.asp" METHOD="POST">
<INPUT TYPE="HIDDEN" NAME="NO" VALUE="0">
<b>メルマガ区分選択:</b><br>
<INPUT TYPE="RADIO" NAME="KUBUN" VALUE="ASP" CHECKED>ASPで遊ぶ、失敗する<br>
<INPUT TYPE="RADIO" NAME="KUBUN" VALUE="VBA" >VBAで楽しく<br>
<INPUT TYPE="RADIO" NAME="KUBUN" VALUE="GUCHI" >愚痴系メルマガ<br>
<INPUT TYPE="RADIO" NAME="KUBUN" VALUE="24H" >コンビニのオモテとウラ<br>
<b>感想:</b>
<INPUT TYPE="TEXT" NAME="MEMO" SIZE=60><br>
<br>
<INPUT TYPE="SUBMIT" VALUE="書 込">
<INPUT TYPE="RESET" VALUE="クリア">
</FORM>
<hr>
今まで書き込まれたご意見・感想<br>
<%  'DB内のデータを表示する
  '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("db029.mdb")

  'やっとデータベースを開ける
  db.open

  'お約束のレコードセットの作成 テーブル名KANSOUから全項目(*)を指定
  Set rs = db.Execute("Select * From KANSOU ORDER BY WriteTime DESC")

  'データの表示をテーブルで行う
  Response.Write "<TABLE Border='1'>"

  '見出しをバカっぽく、そのまま書き込む
  Response.Write "<TR>"
  Response.Write "<TD>日付</TD>"
  Response.Write "<TD>区分</TD>"
  Response.Write "<TD>NO.</TD>"
  Response.Write "<TD>感想</TD>"
  Response.Write "</TR>"

  'お約束のEOFまでループは(データが無くなるまでループ)、
  Do While rs.EOF = False   'レコードセットの.EOFがFalseの間
    Response.Write "<TR>"   '内容を表示する、行開始のタグ<TR>
    Response.Write "<TD>" & rs.Fields.Item("WriteTime") & "</TD>"
    Response.Write "<TD>" & rs.Fields.Item("F_KUBUN") & "</TD>"
    If rs.Fields.Item("F_NO") = 0 Then '0の全体かチェック
      Response.Write "<TD>全体</TD>"
    Else
      Response.Write "<TD>" & rs.Fields.Item("F_NO") & "</TD>" 'NO表示
    End If
    Response.Write "<TD>" & rs.Fields.Item("F_MEMO") & "</TD>"
    Response.Write "</TR>"
    '次のレコードにポインタを移動する
    rs.MoveNext    'これを忘れると悲惨なことに、、、
  Loop

  Response.Write "</TABLE>"  'テーブルは終わりです

  '開いていたレコードセットを閉じる
  rs.Close

  'データベースも閉じようよ
  db.Close

  'お行儀よくオブジェクトも開放しましょう(通常は自動的に解放されるけど)
  Set db = Nothing

%>
<hr>
終了です。<br>

</body>
</html>
---

軽く、ポイントを書くと、

頭で入力用のフォームを作成
^^^^^^^^^^^^^^^^^^^^^^^^^^
感想を書き込んでください。<br>
<FORM ACTION="test029-2.asp" METHOD="POST">
<INPUT TYPE="HIDDEN" NAME="NO" VALUE="0">
<b>メルマガ区分選択:</b><br>
<INPUT TYPE="RADIO" NAME="KUBUN" VALUE="ASP" CHECKED>ASPで遊ぶ、失敗する<br>
<INPUT TYPE="RADIO" NAME="KUBUN" VALUE="VBA" >VBAで楽しく<br>
<INPUT TYPE="RADIO" NAME="KUBUN" VALUE="GUCHI" >愚痴系メルマガ<br>
<INPUT TYPE="RADIO" NAME="KUBUN" VALUE="24H" >コンビニのオモテとウラ<br>
<b>感想:</b>
<INPUT TYPE="TEXT" NAME="MEMO" SIZE=60><br>
<br>
<INPUT TYPE="SUBMIT" VALUE="書 込">
<INPUT TYPE="RESET" VALUE="クリア">
</FORM>
と、入力用のフォームを作成してます。
ACTIONでtest029-2.aspの書込み部を指定してます。
あとは、だらだらと<INPUT TYPE"〜で入力項目を作ってます。
RADIO、ラジオボタンで選択させてるぐらいかなぁ。

DB内のデータを表示する
^^^^^^^^^^^^^^^^^^^^^^^^
  '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("db029.mdb")
  'やっとデータベースを開ける
  db.open
ここまで、前回までのお約束?で、DB029以外変えてない。

  'お約束のレコードセットの作成 テーブル名KANSOUから全項目(*)を指定
  Set rs = db.Execute("Select * From KANSOU ORDER BY WriteTime DESC")
ここもテーブル名を変えただけ。
書込み時間の降順でデータを抽出してます。

  'お約束のEOFまでループは(データが無くなるまでループ)、
  Do While rs.EOF = False   'レコードセットの.EOFがFalseの間
    Response.Write "<TR>"   '内容を表示する、行開始のタグ<TR>
    Response.Write "<TD>" & rs.Fields.Item("WriteTime") & "</TD>"
    Response.Write "<TD>" & rs.Fields.Item("F_KUBUN") & "</TD>"

    If rs.Fields.Item("F_NO") = 0 Then '0の全体かチェック
      Response.Write "<TD>全体</TD>"
    Else
      Response.Write "<TD>" & rs.Fields.Item("F_NO") & "</TD>" 'NO表示
    End If
↑0だったら、全体と置換えて表示してます。

    Response.Write "<TD>" & rs.Fields.Item("F_MEMO") & "</TD>"
    Response.Write "</TR>"
    '次のレコードにポインタを移動する
    rs.MoveNext    'これを忘れると悲惨なことに、、、
  Loop

後始末
^^^^^^
  Response.Write "</TABLE>"  'テーブルは終わりです
  '開いていたレコードセットを閉じる
  rs.Close
  'データベースも閉じようよ
  db.Close
  'お行儀よくオブジェクトも開放しましょう(通常は自動的に解放されるけど)
  Set db = Nothing
これも、決り文句になってしまってる、、、面白くないなぁ。

/*
 * 3.データを受け取って、DBに書き込む
*/

次は、データを受け取って、書込みかぁ。
これもワンパターンで、INSERT INTO文の項目名を変えただけなんですよ。


-- test029-2.asp --
<%@LANGUAGE=VBScript%>
<html>
<head>
<title>INSERT INTO文を使用して、コメント書込み</title>
</head>
<body>
<h2>INSERT INTO文を使用して、コメント書込み</h2>
test029-2.asp<br>
<hr>

<%  '頭で、入力パラメーターの文字数をチェックする
  If Len(Request.Form("MEMO")) = 0 Then
    Response.Write "データを入力して下さい。<br>" 'エラーメッセージの表示
  Else 'データが入力されていたら、
    '書き込み関数を呼ぶ(外側に出したかったので)
    Call TEST_WRITE()
  End If   'If文もここで終わり
%>

<HR>
終了です。<br>
<A href="test029-1.asp">db029.mdb内のデータを確認する</a><br>

</body>
</html>

<% 'データを受け取り、DBへ書き込むつもり
Sub TEST_WRITE()

  '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("db029.mdb")

  'やっとデータベースを開ける
  db.open

  'あまり意味無いけど、変数に代入
  strKUBUN = Request.Form("KUBUN")
  strNO    = Request.Form("NO")
  strMEMO  = Server.HTMLEncode(Request.Form("MEMO")) 'フリー入力なので

  'SQL文を作る
  strSQL = "INSERT INTO KANSOU (F_KUBUN, F_NO, F_MEMO, WriteTime) VALUES ("
  strSQL = strSQL & "'" & strKUBUN & "'"  '区分
  strSQL = strSQL & ", " & strNO          '番号
  strSQL = strSQL & ", '" & strMEMO & "'" '感想メモ
  strSQL = strSQL & ", #" & now & "#)"     '現在時刻、日付型は#で囲む

  'SQL文を発行
  db.Execute(strSQL)

  'オマケで画面にデータ表示
  Response.Write "<HR>SQL [" & strSQL & "]を発行しました<HR>"

  'データベースも閉じようよ
  db.Close

  'お行儀よくオブジェクトも開放しましょう(通常は自動的に解放されるけど)
  Set db = Nothing

End Sub
%>

ポイントは、特に無く
^^^^^^^^^^^^^^^^^^^^
  'あまり意味無いけど、変数に代入
  strKUBUN = Request.Form("KUBUN")
  strNO    = Request.Form("NO")
  strMEMO  = Server.HTMLEncode(Request.Form("MEMO")) 'フリー入力なので
で、Server.HTMLEncodeを使って、文字を変換してるぐらいです。

/*
 * 4.HTMLに組みこんでコメントを取る 隠し項目の利用
*/

私は、メルマガのバックナンバーを5話単位でまとめてます。
バックナンバー内で、コメントを取りたいので、

HTML文章に、
---
感想を書き込んでください。<br>
<FORM ACTION="test029-2.asp" METHOD="POST">
<INPUT TYPE="HIDDEN" NAME="KUBUN" VALUE="ASP">
<INPUT TYPE="HIDDEN" NAME="NO" VALUE="29">
<b>感想:</b>
<INPUT TYPE="TEXT" NAME="MEMO" SIZE=60><br>
<br>
<INPUT TYPE="SUBMIT" VALUE="書 込">
<INPUT TYPE="RESET" VALUE="クリア">
</FORM>
---
と入れると、
隠し項目で、
<INPUT TYPE="HIDDEN" NAME="KUBUN" VALUE="ASP">
と区分を設定、
<INPUT TYPE="HIDDEN" NAME="NO" VALUE="29">
で、どの話かわかるようにしてます。
ユーザーは、メモだけの入力に見えるけど、
隠し項目でパラメーターを送ってます。
こんなセコイ使い方もあるので、なんとなく頭のスミに入れておいてください。

/*
 * 5.終わりの挨拶
*/

今回は、
・SELECT文の復習
・INSERT INTO文の復習
・<FORM>隠し項目の利用
で、
コメントの書込み処理を作ってみました。

なんかイマイチなサンプルだけど、
プログラムの欠陥(穴)を含めて、次回も説明していくので、ヨロシクです。
えっ、今回の欠陥、もうわかってしまった?速いなぁ一流読者は。

テストは、
http://www.ken3.org/cgi-bin/test/test029-1.asp
で、出来ます。
*あと、バックナンバーのページに随時入れておくので、
 コメント入力してみてください。

素朴な疑問あったら、気軽に、
メール、掲示板に書き込んでくださいね。

ASP、VBScript勉強中の三流プログラマーのKen3でした。



ページフッター リンクや広告、質問送信など

三流解説を読んでいただき、どうもです。ここから下は、三流君宛のメッセージ送信や 三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、※質問や感想は、気軽に送ってくださいね。

まぁ、基本はデータの受け取りかなぁ。
・[Form等を使用したデータのやり取り]・・・ASPと言っても、HTMLの入力フォームからデータを受け取ります。POSTやGETでやりとりを押さえますか。

次は、データの入出力 で ADOを使った(ADOで接続) と SQLの解説を少々
・[ADOでMdbファイルを使う]・・・MDBと接続して、簡単な追加・更新・削除を行った。
・[ADOでExcelと接続してみた]・・・.xlsと接続してSQLを使ってみた。
・[ADOでCSVと接続してみた]・・・.CSV テキストを読み出した。※更新・削除はできません

DBが使えるので、あまり使用しないけど、普通のテキストファイル処理
・[テキストファイル処理]・・・ファイルを開いて、書き込む。1行読み込みなどを軽く

VBScriptでFormat関数が無いなど、微妙にVBAと違うけど
[VBScript関数関係の説明]・・・少し、処理を書いてみた。
[その他処理サンプル]・・・あまり良いサンプル作れなかったけど。。。
何かの参考となれば幸いです。

ニガテな環境設定系など
[Win2003 Server に IIS を Setup]・・・ポイントの無い、ほぼ一本道解説だけど。
[IIS 仮想ディレクトの作成とASP動作TEST]・・・Web拡張でASPを有効にしただけです。

Blog:[三流君の作業日記]/ [サンプルコードのゴミ箱]/ 広告-[通販人気商品の足跡]

質問や要望など メッセージを送る(三流君に連絡する)

質問や要望など連絡方法でお互い確認が取りやすく、便利なのが掲示板なのですが、私の対応のまずさから不定期で荒れてしまい、掲示板は現在封鎖中です。(反省しなきゃ)
感想や質問・要望・苦情など 三流君へメッセージを送る。
時間的余裕のある要望・質問・苦情の場合は、下記のフォームからメッセージを送ることができます。

あなたのお名前(ニックネーム):さん
返信は?: 不用(HP更新を待つ) , E-mail→ アドレス:に返事をもらいたい



(感想や質問・要望 メッセージはHPで記事に載せることがあります。)


急ぎで連絡がほしい、そんな時は:[三流君連絡先アドレス]を見て連絡してください。



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