2018年12月15日土曜日

VBScript から SQLServer などにADO(ActiveX Data Objects) で接続する際の注意点

今回もハマりました。

HTA を使って SQLServer のデータを操作する必要があって、
VBScript を使うことにしました。

接続には常套手段として、ADO(ActiveX Data Objects) を使います。

' ADOコネクションを生成
Set Cn = CreateObject("ADODB.Connection")

' DB接続情報
Cn.ConnectionString = "Data Source=localhost\MSSQLSERVER;Initial Catalog=TESTDB;User Id=sa;Password=xxxxx"

' 接続をOpen
Cn.Open

' ADOレコードセットを生成
Set RS = CreateObject("ADODB.Recordset")

' SQLを発行
RS.Open "select * from Table", Cn,adOpenForwardOnly,adLockReadOnly

ここで、緑字の adOpenForwardOnly は普通に通ります。
ところが、赤字の adLockReadOnly が通らないんです。

上記の例はどちらもデフォルトなので、省略できますから、書いたら通らないけど、省略したら通ります。

でも、レコードセットを編集したい場合は、これではできないので、どうしても、
RS.Open "select * from Table", Cn,adOpenKeyset,adLockOptimistic
にしたい。けど通らない。

さんざんいじくりまわした結果、
adLockReadOnly = 1
adLockPessimistic = 2
adLockOptimistic = 3
adLockBatchOptimistic = 4
という数字で指定すれば通りました。

RS.Open "select * from Table", Cn,adOpenKeyset,3