megami 发表于 2009-7-17 14:16:18

请教通过QTP调用带返回参数的存储过程问题

之前参考了这个帖子
http://bbs.51testing.com/viewthread.php?tid=108492&highlight=QTP%2B%B4%E6%B4%A2%B9%FD%B3%CC

我的代码
set conn=server.CreateObject("adodb.connection")
set cmd=server.CreateObject("adodb.command")
strconn="dsn=pubs;uid=sa;pwd"
conn.Open strconn
set cmd.ActiveConnection=conn
cmd.CommandText = "calltest.p_test(?,?)"
        cmd.Parameters(0) ="111111"
cmd.Parameters(1) =3
cmd.Execute()
return =cmd.Parameters.item(1)

存储过程p_test(p_contentstr IN VARCHAR2,p_retcode   OUT NUMBER)
定义了两个参数 一个输入 一个输出
上面的代码 运行后 发现return的值跟之前设置的值是一样的,上面代码 return返回的是3
而我存储过程中 返回值应该是1
但是存储过程又被执行了
这点很不明白 希望大家指点一下 谢谢

megami 发表于 2009-7-17 15:30:01

又试了一下
cmd.CommandText = "{calltest.p_test(?,?)}"
cmd.Parameters.Append cmd.CreateParameter("@p_contentstr",3,1 )
cmd("@p_contentstr")="1111"
cmd.Parameters.Append cmd.CreateParameter("@p_retcode",3 ,4 )
这样写的话
通过cmd.Parameters.item(1)能取得存储过程中的返回值 但是又遇到新的问题
将cmd("@p_contentstr")="1111"改成   cmd("@p_contentstr")="adbda" 就会出现“应用程序在当前操作中使用了错误类型的值”这个错误 ,这个问题就在 cmd.CreateParameter("@p_contentstr",3,1 )这里
中间的3代表的数据类型是adInteger,这就是为什么“1111”的时候能通过的原因
这里想请教一下 其他数据类型比如VarChar之类的 ,CreateParameter()函数中的数据类型枚举是多少
我参考了下面的http://www.w3school.com.cn/ado/app_datatypeenum.asp,但是试了所有的字符串类型的枚举,
结果都报了这个错误 “不正常地定义参数对象。提供了不一致或不完整的信息。”
请大家帮帮忙 谢谢

megami 发表于 2009-7-17 16:46:46

自己解决了
代码如下:
set conn=CreateObject("adodb.connection")
set cmd=CreateObject("adodb.command")
conn.ConnectionString = "dsn=pubs;uid=sa;pwd;"

conn.Open
If conn.State = 0 Then
    msgbox ("连接数据库失败")
else
'   msgbox ("连接数据库成功")

end if
set cmd.ActiveConnection=conn
dim return
cmd.CommandText = "{calltest.p_test(?,?)}"

'input params
cmd.Parameters.Append cmd.CreateParameter("@contentstr",8,1 )
cmd("@contentstr")="0000"

'output params
cmd.Parameters.Append cmd.CreateParameter("@p_retcode",5,4 )
cmd.Execute()
bbb=cmd.Parameters.item(1)
msgbox (bbb)

feiquan 发表于 2009-7-23 10:13:42

谢谢,我运气好,刚好需要

学习了^

ym_wei 发表于 2010-11-17 16:29:09

留个脚印
页: [1]
查看完整版本: 请教通过QTP调用带返回参数的存储过程问题