VBAのADOで「パラメーターが少なすぎます。xを指定してください。」と表示された場合の原因
ADODBで「パラメーターが少なすぎます。xを指定してください。」が表示される原因。
ADODB.ParameterとADODB.CommandのParameterで更新する時に出る。
.NET系のプログラマーは、データベース更新系のCommandと同じノリでやってしまうのだけれども、VBAの場合、些細なミスで頻繁に「パラメーターが少なすぎます。xを指定してください。」みたいなエラーが表示される。
主な原因は....
エラーの内容と推測しにくいのが、3番目のParameterに追加する際のデータ型が相違しているの分だ。
エラー内容的には、SQLのバインド変数のパラメーター名が誤っているとか、パラメーターの数がズレてしまったとかを内容的には探すのだけれども、どれも問題が無い場合、3番目のデータ型が要注意だ。
しかもやっかいな事に、デバッグで2回実行すると何故か成功する等、振る舞いが不安定なので、余計原因を抑えるのに混乱する。
主な原因は....
- SQLの誤り
- バインド変数の数がSQLで指定しているパラメーターより実際に相違している。
- Parameterに追加する際のデータ型が相違している。
エラーの内容と推測しにくいのが、3番目のParameterに追加する際のデータ型が相違しているの分だ。
エラー内容的には、SQLのバインド変数のパラメーター名が誤っているとか、パラメーターの数がズレてしまったとかを内容的には探すのだけれども、どれも問題が無い場合、3番目のデータ型が要注意だ。
しかもやっかいな事に、デバッグで2回実行すると何故か成功する等、振る舞いが不安定なので、余計原因を抑えるのに混乱する。
例えば、ACCESSのデータ型は、大きい数値、数値みたいなデータ型があって、とりあえず、何でもまかなえそうな[BigInt]を指定したりしていると、このエラーが表示される。
Set sql_prm = sql_cmd.CreateParameter("項目名", adBigInt, adParamInput)
sql_cmd.Parameters.Append sql_prm
アクセスのデータ型で数値は、Numericになるので要注意。
Set sql_prm = sql_cmd.CreateParameter("項目名", adNumeric, adParamInput)
sql_cmd.Parameters.Append sql_prm
このエラーに遭遇している人で解決が上手くいっていない人は、大抵の場合、エラー内容から察して、SQLで指定しているパラメーターの数を鬼のように数え直しているだろうが、それでも解決しない場合は、パラメーターの数では無く、パラメーターを追加する際のオプションも見直した方が良いだろう。
VB6系のプログラムは、エラーが分かりにくい、変な振る舞いがあったり、とても嫌いな言語なのだけれども、レガシーな資産を拡張してつくる場合があったり、Windowsプログラマーにとっては避けては通れない宿命の言語だ (*´Д`)