<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でした。
ここまで、読んでいただきどうもです。目的の情報が見つかったか?少々心配しつつ、、、
感想や質問・要望・苦情など 三流君へメッセージを送る。
下記のフォームからメッセージを送ることができます。
[三流君(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記事 バックナンバー目次]