C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: VBSからストアドプロシージャの戻り値を取得


(過去ログ 14 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■4406 / inTopicNo.1)  VBSからストアドプロシージャの戻り値を取得
  
□投稿者/ Question (1回)-(2007/06/16(Sat) 11:35:59)

分類:[VBScript] 

VBSからSQL Server2005のストアドプロシージャ(『SELECT COUNT (*)〜』でレコード数を取得)
を実行したのですが、戻り値(COUNTの結果)を取得する為の処理でCreateParameterを実行して
いる行に対して以下のエラーが発生しています。

 エラー : 引数が間違った型、許容範囲外、または競合しています
 コード : 800A0BB9
 ソース : ADODB.Command

CreateParameterの書式に関して、MSDNや他のフォーラムで検索してみたところ特に問題は無さ
そうなのですが・・・。

コードを記載しますので問題点をご指摘願います。

【補足】
 ・DBへの接続は正常に完了している
 ・ストアドプロシージャの実行は正常に完了している

********** 以下がコードになります **********

dim strConnection

strConnection = "接続文字列"

Set objConn = CreateObject("ADODB.Connection")

objConn.Open strConnection

Set objComm = CreateObject("ADODB.Command")

With objComm
.ActiveConnection = objConn
.CommandType = 4
.CommandText = "プロシージャ名"
Set Param = .CreateParameter("RetValue",adEmpty,adParamReturnValue,2,4)  ←←← エラー行
Parameters.Append Param
.Execute()
TEST = .Parameters("RetValue").Value)
Wscript.echo TEST
End With

set objcomm = Nothing
Set objConn = Nothing

引用返信 編集キー/
■4407 / inTopicNo.2)  Re[1]: VBSからストアドプロシージャの戻り値を取得
□投稿者/ HiJun (41回)-(2007/06/16(Sat) 11:45:08)
Paramのバインド変数(っていうべきなのかな)の開放処理ができていないのに、
再度作成していませんか?

引用返信 編集キー/
■4409 / inTopicNo.3)  Re[2]: VBSからストアドプロシージャの戻り値を取得
□投稿者/ Question (3回)-(2007/06/16(Sat) 13:05:30)
No4407 (HiJun さん) に返信
> Paramのバインド変数(っていうべきなのかな)の開放処理ができていないのに、
> 再度作成していませんか?
>

早速のご回答ありがとうございます。
ご指摘頂いた『Paramのバインド変数の開放処理』というのは、
ADODB.Parameterオブジェクトの作成ということでしょうか?

以下のように修正してみましたが、同様のエラーが発生します。
(他サイトでは修正前のコードで実行可能と記載されていたのですが・・・)

********** 修正箇所抜粋 **********
    ・
    ・
    ・
Set objComm = CreateObject("ADODB.Command")

objComm.ActiveConnection = objConn
objComm.CommandType = 4
objComm.CommandText = "Ap_CntNumberWork_Tbl"

Set Param = CreateObject("ADODB.Parameter")  ←←← 追加箇所
Set Param = objComm.CreateParameter("RetValue",adInteger,adParamReturnValue)
objComm.Parameters.Append Param
objComm.Execute()

TEST = ObjComm.Parameters("RetValue").Value
Wscript.echo TEST
    ・
    ・
    ・

引用返信 編集キー/
■4420 / inTopicNo.4)  Re[3]: VBSからストアドプロシージャの戻り値を取得
□投稿者/ ちゃっぴ (27回)-(2007/06/16(Sat) 23:02:36)
ちゃっぴ さんの Web サイト
普通に RecordSet で受ければ問題ないでしょうに。
引用返信 編集キー/
■4424 / inTopicNo.5)  Re[1]: VBSからストアドプロシージャの戻り値を取得
□投稿者/ 魔界の仮面弁士 (307回)-(2007/06/17(Sun) 08:08:45)
No4406 (Question さん) に返信
> 分類:[VBScript] 
VBS の実行ホストは何でしょうか。
ASP(Server-side)?  WSC? HTC? WSH(WScript.exe/CScript.exe)? HTML/HTA? ScriptControl?


> 	Set Param = .CreateParameter("RetValue",adEmpty,adParamReturnValue,2,4)  ←←← エラー行
adEmpty や adParamReturnValue といった定数が、Empty 値になっていませんか?
もし、Option Explicit 宣言を追加すると、エラーになるようなら、下記を試してみてください。


<Active Server Pages の場合>
解決法1) global.asa 内に以下のいずれかの記述を加えて、ADO への参照設定を行います。
 <!-- METADATA TYPE="TypeLib" FILE="C:\Program Files\Common Files\System\ado\msado15.dll" -->
 <!-- METADATA TYPE="TypeLib" UUID="00000200-0000-0010-8000-00AA006D2EA4" version="2.0" -->
 <!-- METADATA TYPE="TypeLib" UUID="00000201-0000-0010-8000-00AA006D2EA4" version="2.1" -->
 <!-- METADATA TYPE="TypeLib" UUID="00000205-0000-0010-8000-00AA006D2EA4" version="2.5" -->
 <!-- METADATA TYPE="TypeLib" UUID="00000206-0000-0010-8000-00AA006D2EA4" version="2.6" -->

解決法2) *.asp 内に以下のいずれかの記述を加えて、ADO の定数定義をインクルードします。
 <!-- #include file="C:\Inetpub\wwwroot\include\adovbs.inc" -->
 <!-- #include virtual="/include/adovbs.inc" -->
 なお、C:\Program Files\Common Files\System\ado\ にある adovbs.inc を、事前に
 Web アプリの任意のフォルダ(上記では、/inculde/) にコピーしておく必要があります。

<Windows Script Components の場合>
解決法) *.wsc 内に以下のいずれかの記述を加えて、ADO への参照設定を行います。
 <reference guid="00000200-0000-0010-8000-00AA006D2EA4" version="2.0" />
 <reference guid="00000201-0000-0010-8000-00AA006D2EA4" version="2.1" />
 <reference guid="00000205-0000-0010-8000-00AA006D2EA4" version="2.5" />
 <reference guid="00000206-0000-0010-8000-00AA006D2EA4" version="2.6" />
 <reference object="ADODB.Connection"/>
 <reference object="ADODB.Recordset" />
 <reference object="ADODB.Command" />
 <reference object="ADODB.Parameter" />
 <reference object="ADODB.Record" />
 <reference object="ADODB.Stream" />

<その他の実行ホスト>
解決法) タイプライブラリ(≠クラスライブラリ)を読み込む機能がありませんので、
 Const adEmpty = 0
 Const adParamReturnValue = &H4
 といった定数宣言を、自分で行う必要があります。
 必要な定数値については、adovbs.inc などから参照してください。
 http://www.whitire.com/vbs/tips0136.html

引用返信 編集キー/
■4438 / inTopicNo.6)  Re[2]: VBSからストアドプロシージャの戻り値を取得
□投稿者/ Question (5回)-(2007/06/18(Mon) 09:13:59)
TO:ちゃっぴさん
 →当初はcountの集計結果をrecordsetで受けていたのですが、ストアドプロシージャを
  利用する事が必須条件になってしまったので・・・。

TO:魔界の仮面弁士
 →ご指摘頂いたとおり、定数 adEmpty、adParamReturnValueのEnum値が Emptyになっていました。
  参考にしたサンプルコードではそのままオプションとして指定できるというふうに記載されて
  いたので勘違いしていました・・・。
==========================================================================================

コードを以下の様に訂正して戻り値を取得できる様になりました。

 誤).→ Set Param = objComm.CreateParameter("RetValue",adInteger,adParamReturnValue)
 正).→ Set Param = objComm.CreateParameter("RetValue",3,4)

お手数をおかけしました m(__)m
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -