[ホーム] -> [ASP 実験室]

データベースに接続

データベースにアクセスする方法

データベースにアクセスする方法は、大きく分けて2つあります。それは、ASP で、元から用意されている ADO (Active Data Objects) というオブジェクトを使う方法と、その他のオブジェクトを使う方法です。ADO とは、ODBC API をカプセル化するオブジェクトで、ODBC Version 3.0 に準拠したものであれば、どんなデータベースでも使用できます。Microsoft 社の SQL Server に付いている ODBC ドライバなどは、この規格をきちんと満たしているので、ODBC ドライバさえあればこれがベターではないでしょうか。

ADO 以外に、データベースの製造元等が提供している、オリジナルのOLE ライブラリ(最近では ActiveX DLL と呼ばれているるもの)を使用する方法があります。Microsoft 社の製品である Microsoft Access(Jet Database Engine) を操るための DAO (Data Access Object) や、Oracle 社の Oracle データベースを操る oo4o (Oracle Object for OLE)とかが、これに当たります。たぶん、Visual Basic で使える OLE ならば、まず利用できるでしょう。もし、プログラマが RDO (Remote Data Object) に慣れているのであれば、これらも使えると思います(どの程度まで使用できるかは分かりませんが)。

オブジェクト(oo4o)を使用する方法

これは、直ぐに思い当たる人も多いかと思います。そう、前のページのファイルをアクセスする方法で使った、CreateObject メソッドを使用するのです。上にも書いたように、オブジェクトを生成できると言うことは、オブジェクトがきちんとサーバにインストールされていれば、大抵のオブジェクトを使用できると言うことではないでしょうか(いや、もちろんフォームを提供するようなのは無理だろうけどね)。例えば、oo4o を使用したいのであれば、以下のような1文を書くだけで利用できるようになります。

Set oraSession = CreateObject("OracleInProcServer.XOraSession")

これって、VB で oo4o を使うのと全く同じですよね。この後、どうコーディングするかは、oo4o を使ったことのある VB プログラマの人にはお手の物でしょう。

ADO を使用する方法

次の例は、ADO を使用した例です。ここの例では、データベースにSQL Server を用いていますが、もちろん、ODBC ドライバさえあればいいので、Access や、Oracle でも構いません。

Set adoRS = Server.CreateObject("ADODB.Recordset")
adoRS.Open "SELECT * FROM SYAIN_MASTER", "Uid=sa;PWD=;DSN=WWWDB"

1行目で、ADO のオブジェクトを生成しています。2行目では、いきなりテーブルをオープンします。1つ目の引数が、見ての通り SQL 文です。2番目の引数は、ODBC ドライバに渡す固有の文字列です。この例ではSQL Server を使用していますので、このような設定になります。DSN にあらかじめ作成しておいた ODBC のデータソースネームを指定し、ユーザIDとパスワードを指定すればよいのです。これらの設定はODBC ドライバによって違うので、ODBC ドライバのマニュアルを参考にして下さい。

ADO は見て分かるように、あまり深い階層構造を取っていません。普通ならば、セッションオブジェクトや、ダイナセットオブジェクトなどがあり、順番にオープンしなければいけなかったりするのですが、Create したレコードセットオブジェクトに対して、いきなり Openメソッドを発行しています。Microsoft 社によると、階層化しないことによりよりシンプルになり、使用してないオブジェクトが減り、ワーキングセットのサイズも小さくなったそうです。とは言っても、もちろんきちんとオブジェクト構造は定義されているので、ダイナセットより1階層上のコネクションオブジェクトでコネクションを確立させ、その下でダイナセットを作成することもできます。

Set adoConnection = Server.CreateObject("ADODB.Connection")
adoConnection.Open "WWWDB", "sa"
Set adoRS = adoConnection.Execute("SELECT * FROM SYAIN_MASTER")

ADO のコネクションオブジェクトを CreateObject していることに注意して下さい。これで接続を確立させ、その下で Execute でSQL文を発行しているのです。レコードセットオブジェクトの下には、Fields コレクション および Field オブジェクトが存在します。したがって、フィールドのデータにアクセスするには、以下のようにします。

<%= RS.Fields("NAME") %>

DAO や RDO に比べ使いやすいこと、高速であること、メモリのオーバーヘッドが少ないこと、および必要なディスク容量が小さいことが利点だそうです。どの程度、パフォーマンスに違いが出るかは分かりませんが、アクセスの非常に多いサイトでは、ADO の方がいいような気もします。

確認