300分 求解ADO调用Oracle 存储过程的问题

misboy 2003-08-20 08:05:05
通过一个ActiveX DLL组件访问Oracle数据库,问题出在通过该组件的接口访问存储过程时。当客户端工程与ActiveX 工程一起编译时,可以顺利的调用存储过程;但当ActiveX 工程编译为DLL,客户端工程单独运行时出现如下错误:

错误号为3001,错误提示:Arguments are of the wrong type,are out of acceptable range,or are in conflict with one another

该DLL组件的其他接口均正常,并且通过如下方式条用存储过程ps_MyProc
也能正常运行:
strSQL = " {call ps_MyProc(1,2)}"
g_objDBAS.Execute strSQL
'g_objDBAS是通过DLL创建的对象,Execute接口执行SQL语句
------------------------------
------------------------------
客户端代码片段如下:
Dim rs As New ADODB.Recordset
Dim cmd As New ADODB.Command

cmd.CommandText = "psTest"
cmd.CommandType = adCmdStoredProc

Dim prmA As New Parameter
Set prmA = cmd.CreateParameter("p_A", adInteger, adParamInput, , 1)
cmd.Parameters.Append prmA

Dim prmB As New Parameter
Set prmB = cmd.CreateParameter("p_B", adInteger, adParamOutput)
cmd.Parameters.Append prmLNZS

g_objDBAS.ExecCmd cmd 'g_objDBAS是通过DLL创建的对象,ExecCmd是其接口


----------------------------------
----------------------------------
ActiveX 组件部分代码如下:

Public Function ExecCmd(cmd As ADODB.Command) As ADODB.Recordset

On Error GoTo PROC_ERROR
'g_Conn 是全局的连接对象
If g_Conn Is Nothing Then
Call openDB
ElseIf g_Conn.State = 0 Then
Call openDB
End If

Dim rs As New ADODB.Recordset

Set cmd.ActiveConnection = g_Conn

Set rs = cmd.Execute()

Set ExecCmd = rs

PROC_EXIT:
Exit Function

PROC_ERROR:
Err.Raise Err.Number, Err.Source, Err.Description
GoTo PROC_EXIT
End Function
———————————————————————————————

其余200分在另外两个帖子中给
...全文
29 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
misboy 2003-08-20
  • 打赏
  • 举报
回复
to zqfleaf(动力港湾):
似乎从中看不出我的问题的答案,还望点明
zqfleaf 2003-08-20
  • 打赏
  • 举报
回复
http://support.microsoft.com/default.aspx?scid=kb;en-us;177358
misboy 2003-08-20
  • 打赏
  • 举报
回复
另外两个给分贴:
http://expert.csdn.net/Expert/topic/2169/2169887.xml?temp=.4856989
http://expert.csdn.net/Expert/topic/2169/2169883.xml?temp=.7135431

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧