Translate

VBAのADOで「パラメーターが少なすぎます。xを指定してください。」と表示された場合の原因

ADODBで「パラメーターが少なすぎます。xを指定してください。」が表示される原因。



ADODB.ParameterとADODB.CommandのParameterで更新する時に出る。

.NET系のプログラマーは、データベース更新系のCommandと同じノリでやってしまうのだけれども、VBAの場合、些細なミスで頻繁に「パラメーターが少なすぎます。xを指定してください。」みたいなエラーが表示される。

主な原因は....

  • 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プログラマーにとっては避けては通れない宿命の言語だ (*´Д`)



このブログの人気の投稿

ACCESSでバーコードスキャンしたら自動でイベントを起こす方法

PostgreSQL 11 でpg_dumpallを使ってバックアップしたデータをリストアするとき文字化けの対処法

ACCESSのVBAを実行するとACCESSが強制終了する事がある

VBSでマクロの実行時に警告を非表示にする方法

ACCESSのVBAでADOを利用したバインド変数を利用したデータベース連携方法

ACCESSでバーコードをスキャンして登録更新する簡単なサンプル

pgAdmin 4が遅いのは仕方がない | PostgreSQL things.

ASP.NETのでクライアント証明書を使ったログイン認証を行う方法

ACCESSのVBAでリストビュー(ListView)を使う為の設定 | Office365