TL;DR
- 今時あまり役に立たないかもしれないADODBのエラーに関する情報
- 「引数が間違った型、許容範囲外、または競合しています。」というメッセージは、直接的な原因でない場合に表示される場合がある。
- 事例を2つあげる
例1:定義されていない定数を使用した場合
基本的には、vbaの環境で発生する。
例えば、以下のようなコードでエラーとなる
With CreateObject("ADODB.Stream")
.Type = adTypeBinary '→ここでエラー
End With
VBAでは、adTypeBinaryなどの定数は定義されていないため、自分で定義する必要がある。
定義していない場合は、adTypeBinaryはEmptyの値になり今回のエラーが表示される。
対処
変数を定義する。
また、先頭にOption Explicitを記述すると、未定義の変数をエラーにできる
例2:パラメータクエリで、エラーとなるようなオブジェクトの引数をパラメータに設定した場合
Dim Cn As ADODB.Connection
Dim Rs As ADODB.Recordset
Dim Cmd As ADODB.Command
(中略)
Rs.MoveLast
Rs.MoveNext
Cmd.Parameters("p1").Value = Rs.Fields("v1").Value '→ここでエラー
Rs.Fields("v1").Value
は、本来は、BOFまたはEOFがTrueとなっている旨のエラーが出る。
しかし、これをパラメーターに設定すると、表示されるのは、今回のエラーとなるため、原因の把握がしづらい。
対処
ロジックを見直す。