• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBScript ストアド実行 パラメータ設定でエラー)

VBScript ストアド実行 パラメータ設定でエラー

このQ&Aのポイント
  • VBScriptでOracle DBへ接続し、パラメータ設定でエラーが発生しています。
  • パラメータなしで実行すると正常に処理が流れますが、パラメータ設定のステップでエラーが発生し、実行まで処理できていない状況です。
  • 原因解明とエラー解消のために以下の2点について質問したいです。1)29行目のステップでのパラメータ名について、任意の名前でよいのか? 2)29行目でエラーにならず、39行目でエラーになる理由は何か?

質問者が選んだベストアンサー

  • ベストアンサー
  • takkunnet
  • ベストアンサー率74% (32/43)
回答No.4

#1です。 >Const adChar = 129を宣言するとなぜかエラーになる。 とのことですが、そのときにエラーになるのは Set Iparm1 = Cmd.CreateParameter("Iparm1",adChar,adParamInput,5,TheForm.Text1.Value) の行じゃないですか? これは、TheForm.Text1.Valueの「デフォルト値の桁数が6桁」あるのに対しパラメタの桁数が「5」となっているために起きております。 (エラーは「現在の操作に対して、間違った型の値を使用しています。」ですよね?) そのため桁数を「6」にするか「代入する値を5桁」にするかしてやるとエラーが発生しません。 また、「adCharの宣言をなくすとエラーが発生しない」とのことですが、これは以下のような理由からです。 【理由】 adCharを宣言していなかった場合、VBScriptはadCharの部分が「変数」だと認識し、変数を確保します。その場合初期値として「0(ゼロ)」がセットされることになります。 CreateParameterにおいて「0(ゼロ)」は「adEmpty」を意味し、それでCreateParameterが実行されています。型がEmptyのため他の値が無視され、正常処理となるのです。 しかし、Emptyのままではパラメタとして使用できませんので「b Cmd.Parameters.Append Iparm1」でエラーが発生してしまうのです。 このようなバグをなくすためにも「Option Explicit」宣言をしておくことをお勧めします。 一応以上が今回のバグの詳細になります。 がんばって開発を続けてください。

take_off090
質問者

お礼

takkunnet様 すべて解決しました。 > これは、TheForm.Text1.Valueの「デフォルト値の桁数が6桁」あるのに対しパラメタの桁数が「5」となっているために起きております。 > (エラーは「現在の操作に対して、間違った型の値を使用しています。」ですよね?) > そのため桁数を「6」にするか「代入する値を5桁」にするかしてやるとエラーが発生しません。 全くそのとおりでした。桁数設定が問題とは恥ずかしいです。 > また、「adCharの宣言をなくすとエラーが発生しない」とのことですが、これは以下のような理由からです。 > > 【理由】 ...以下省略 VBと基本的に同じであることが、エラーを解消していくうちに理解できました。 ありがとうございました。

その他の回答 (3)

  • takkunnet
  • ベストアンサー率74% (32/43)
回答No.3

#1です。 わかりました。 定数部を宣言するか、数値にする必要があります。 adCmdStoredProc = 4 adChar = 129 adParamInput = 1 それで実行できるはずです。 VBSではVBのときのように参照設定できないので定数が使用できません。ご注意ください。

take_off090
質問者

補足

takkunnetさん 回答ありがとうございます。 ご指摘のとおりに試してみまして、以下の結果となりました。 1)Const adChar = 129を宣言するとなぜかエラーになる。 宣言をコメントにすると、 Set Iparm1 = Cmd.CreateParameter("Iparm1",adChar,adParamInput,5,TheForm.Text1.Value) が続行できます。 また、Cmd.Parameter.Append Iparm1 は引き続きエラーとなりました。 お時間があれば、追加質問にもお答えいただければ助かります。

  • takkunnet
  • ベストアンサー率74% (32/43)
回答No.2

#1です。 2)についてですが、 私のほうがソースをよくみていませんでした。。。すいません(^^; 変数で問題ないですね。

  • takkunnet
  • ベストアンサー率74% (32/43)
回答No.1

全く実行せずに回答するのも申し訳ないのですが。。。。 ちなみに「1)29行目。。。」となっていますが、35行目の間違いですよね・・・? 1)について 任意の名前でよいと思いますが、ストアドプロシージャ内で使用する名前と同一にしておく必要があったと思います。 b Cmd.Parameters.Append Iparm1 の「Iparm1」が「"(ダブルコーテーション)」でくくられていないからでは? これでは「Iparm1」という変数の値を代入しようとするのでは?

関連するQ&A