メイン画像

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

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


VBScript でデータベースの検索や更新をするには、ActiveX データオブジェクト(ADO)を使う。

ADOには大きく以下の3つのオブジェクトがあり、これらを組み合わせてデータにアクセスする。

  • Connection - データベースとの接続を管理する。
  • Command - データベースに対してクエリを実行する。
  • Recordset - クエリの実行結果を格納する。

データベースの検索

一番手軽なデータ検索の方法

手っ取り早くデータを検索するなら、RecordsetオブジェクトのOpenメソッドでデータベースへの接続と検索を一度にやってしまえばよい。

ただし、この方法は手軽だが、検索の都度データベースと接続してしまうデメリットがある。
(同じ接続先だったとしても、異なる接続になる)

何回かSQLを発行したいときは、Connectionオブジェクトを使って接続したほうがよい。

〈流れ〉

  1. Recordsetオブジェクトを生成する。
  2. Openメソッドにクエリと接続文字列を指定して実行する。
  3. レコードセットを閉じる。

〈サンプル〉

Dim rst
Set rst = CreateObject("ADODB.Recordset")

'データベースに接続してデータを検索する
rst.Open "select EMPNO, ENAME from EMP", "Provider=OraOLEDB.Oracle;User ID=scott;Password=tiger;Data Source=ORCL;"

'~~~TODO: 検索結果を使った処理を書く~~~

'レコードセットを閉じる
If rst.State <> 0 Then
  rst.Close
End If
Set rst = Nothing

接続済みのConnectionオブジェクトを指定してレコードセットを開く方法

データベースと都度接続するのは効率が悪い。
ConnectionオブジェクトをRecordsetオブジェクトに指定すれば、接続を使い回せる。

〈流れ〉

  1. Connectionオブジェクトを生成して、データベースに接続する。
  2. Recordsetオブジェクトを生成する。
  3. RecordsetオブジェクトのOpenメソッドに、クエリと接続済みのConnectionオブジェクトを指定して実行する。
  4. レコードセットを閉じる。
  5. データベースから切断する。

〈サンプル〉

'データベースに接続する
Dim conn
Set conn = CreateObject("ADODB.Connection")
conn.Open "Provider=OraOLEDB.Oracle;User ID=scott;Password=tiger;Data Source=ORCL;"

Dim rst
Set rst = CreateObject("ADODB.Recordset")

'データを検索する
'第2引数には接続済みのConnectionオブジェクトを指定する
rst.Open "select EMPNO, ENAME from EMP", conn

'~~~TODO: 検索結果を使った処理を書く~~~

'レコードセットを閉じる
If rst.State <> 0 Then
  rst.Close
End If
Set rst = Nothing

'データベースから切断する
If conn.State <> 0 Then
  conn.Close
End If
Set conn = Nothing

Connection.Execute()を使う

レコードセットのOpenメソッドではなく、 ConnectionオブジェクトのExecuteメソッドでもデータを検索できる。

Executeメソッドの引数にselect文を指定すると、戻り値としてレコードセットを返す。

レコードセットのプロパティは既定値が使われ、変更できない。
既定値以外を使いたいときは、レコードセットのOpenメソッドを使うしかない。

〈流れ〉

  1. Connectionオブジェクトを生成して、データベースに接続する。
  2. Executeメソッドにクエリを指定して実行する。
    戻り値のレコードセットを受け取る。
  3. レコードセットを閉じる。
  4. データベースから切断する。

〈サンプル〉

'データベースに接続する
Dim conn
Set conn = CreateObject("ADODB.Connection")
conn.Open "Provider=OraOLEDB.Oracle;User ID=scott;Password=tiger;Data Source=ORCL;"

'データを検索する
Dim rst
Set rst = conn.Execute("select EMPNO, ENAME from EMP")

'~~~TODO: 検索結果を使った処理を書く~~~

'レコードセットを閉じる
If rst.State <> 0 Then
  rst.Close
End If
Set rst = Nothing

'データベースから切断する
If conn.State <> 0 Then
  conn.Close
End If
Set conn = Nothing

Commandオブジェクトを使う

クエリにパラメーターを指定したいときはCommandオブジェクトを使う。

手順は多いが、柔軟に対応できる。
常にこのパターンで検索するように作っておけば良いだろう。

〈流れ〉

  1. Connectionオブジェクトを生成して、データベースに接続する。
  2. Commandオブジェクトを生成して、クエリ、パラメーターを定義する。
  3. Recordsetオブジェクトを生成する。
  4. OpenメソッドにCommandオブジェクトを指定して実行する。
  5. Commandオブジェクトを解放する。
  6. レコードセットを閉じる。
  7. データベースから切断する。

〈サンプル〉

'データベースに接続する
Dim conn
Set conn = CreateObject("ADODB.Connection")
conn.Open "Provider=OraOLEDB.Oracle;User ID=scott;Password=tiger;Data Source=ORCL;"

'コマンドオブジェクトを生成する
Dim cmd
Set cmd = CreateObject("ADODB.Command")
cmd.CommandText = "select EMPNO, ENAME from EMP E where E.EMPNO = :EmpNo"
Set cmd.ActiveConnection = conn

'パラメーターを生成する
'*"30001" という文字列をパラメーターとして生成する例
'  引数1:名前
'  引数2:データ型(今回は文字列なので200(adVarChar))
'  引数3:方向(今回は入力なので1(adParamInput))
'  引数4:指定する値のバイト数
'  引数5:指定する値
Dim p1
Set p1 = cmd.CreateParameter("EmpNo", 200, 1, LenB("30001"), "30001")

'コマンドオブジェクトにパラメーターを追加
cmd.Parameters.Append p1

Dim rst
Set rst = CreateObject("ADODB.Recordset")

'コマンドオブジェクトを使ってデータを検索する
rst.Open cmd

'コマンドオブジェクトを解放する
Set cmd.ActiveConnection = Nothing
Set cmd = Nothing

'~~~TODO: 検索結果を使った処理を書く~~~
'~~~TODO: たとえば1件ずつ処理するなら以下のように
Do While rst.EOF = False
  '~~~TODO: レコードに対して行う処理を書く

  '次のレコードに進める
  rst.MoveNext
Loop

'レコードセットを閉じる
If rst.State <> 0 Then
  rst.Close
End If
Set rst = Nothing

'データベースから切断する
If conn.State <> 0 Then
  conn.Close
End If
Set conn = Nothing

アカウントを作成 して、もっと沢山の記事を読みませんか?


この記事が気に入ったら ことりと さんを応援しませんか?
メッセージを添えてチップを送ることができます。


この記事にコメントをしてみませんか?


酒とアクアリウムが最近の楽しみ。

おすすめの記事