
VBScriptでデータベースにアクセスする方法
VBScriptでデータベースにアクセスする方法
VBScript でデータベースの検索や更新をするには、ActiveX データオブジェクト(ADO)を使う。
ADOには大きく以下の3つのオブジェクトがあり、これらを組み合わせてデータにアクセスする。
Connection
- データベースとの接続を管理する。Command
- データベースに対してクエリを実行する。Recordset
- クエリの実行結果を格納する。
データベースの検索
一番手軽なデータ検索の方法
手っ取り早くデータを検索するなら、Recordset
オブジェクトのOpen
メソッドでデータベースへの接続と検索を一度にやってしまえばよい。
ただし、この方法は手軽だが、検索の都度データベースと接続してしまうデメリットがある。
(同じ接続先だったとしても、異なる接続になる)
何回かSQLを発行したいときは、Connection
オブジェクトを使って接続したほうがよい。
〈流れ〉
Recordset
オブジェクトを生成する。Open
メソッドにクエリと接続文字列を指定して実行する。- レコードセットを閉じる。
〈サンプル〉
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
オブジェクトに指定すれば、接続を使い回せる。
〈流れ〉
Connection
オブジェクトを生成して、データベースに接続する。Recordset
オブジェクトを生成する。Recordset
オブジェクトのOpen
メソッドに、クエリと接続済みのConnection
オブジェクトを指定して実行する。- レコードセットを閉じる。
- データベースから切断する。
〈サンプル〉
'データベースに接続する
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
メソッドを使うしかない。
〈流れ〉
Connection
オブジェクトを生成して、データベースに接続する。Execute
メソッドにクエリを指定して実行する。
戻り値のレコードセットを受け取る。- レコードセットを閉じる。
- データベースから切断する。
〈サンプル〉
'データベースに接続する
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
オブジェクトを使う。
手順は多いが、柔軟に対応できる。
常にこのパターンで検索するように作っておけば良いだろう。
〈流れ〉
Connection
オブジェクトを生成して、データベースに接続する。Command
オブジェクトを生成して、クエリ、パラメーターを定義する。Recordset
オブジェクトを生成する。Open
メソッドにCommand
オブジェクトを指定して実行する。Command
オブジェクトを解放する。- レコードセットを閉じる。
- データベースから切断する。
〈サンプル〉
'データベースに接続する
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
アカウントを作成 して、もっと沢山の記事を読みませんか?
この記事が気に入ったら ことりと さんを応援しませんか?
メッセージを添えてチップを送ることができます。
この記事にコメントをしてみませんか?