ITPUB??ì3
12月微软Hyper-V虚拟化沙龙主题征集
ITPUB论坛 » Oracle开发 » 类型名称无效的错误。

标题: 类型名称无效的错误。
离线 yzf01
中级会员


精华贴数 0
个人空间 0
技术积分 1183 (1529)
社区积分 640 (1252)
注册日期 2001-11-19
论坛徽章:11
2008北京奥运纪念徽章:赛艇2008北京奥运纪念徽章:花样游泳2008北京奥运纪念徽章:曲棍球生肖徽章2007版:猪2008年新春纪念徽章生肖徽章2007版:鸡
      

发表于 2002-1-14 17:08 
类型名称无效的错误。

我写了一个过程在Oracle,客户端用ADO来连接运行,
存储过程的接口是:
======================================================
Procedure SP_findObjID(resultset out Rome.RefCursor,Obj_ID in char,Obj_TabName in varchar2
                          ,pObj_ID out char
                          ,pObj_TabName out varchar2)
========================================================

客户端VB的程序是:
=======================================================
Dim con As New ADODB.Connection
   Dim cmd As New ADODB.Command
   Dim rs As New ADODB.Recordset
  Dim Param1 As New ADODB.Parameter
  Dim Param2 As New ADODB.Parameter
  Dim Param3 As New ADODB.Parameter
  Dim Param4 As New ADODB.Parameter
  Dim Param5 As New ADODB.Parameter
  
  Set con = CreateObject("ADODB.Connection"
  con.CursorLocation = adUseClient
  con.Open "DSN=Rome_Oracle;UID=rome;PASSWORD=manager"
  
  Set cmd = CreateObject("ADODB.Command"
  Set cmd.ActiveConnection = con
  Set Param1 = cmd.CreateParameter("result", adPropVariant, adParamOutput)
  cmd.Parameters.Append Param1
  Set Param2 = cmd.CreateParameter(, adChar, adParamInput, 32, "FSTDC01121316182678D"
  cmd.Parameters.Append Param2
  Set Param3 = cmd.CreateParameter(, adVarChar, adParamInput, 50, "TCAPPGROUP"
  cmd.Parameters.Append Param3
  Set Param4 = cmd.CreateParameter(, adChar, adParamOutput, 32)
  cmd.Parameters.Append Param4
  Set Param5 = cmd.CreateParameter(, adVarChar, adParamOutput, 50)
  cmd.Parameters.Append Param5
  
  cmd.CommandText = "Ora_Rome.SP_findObjID"
  Set rs = cmd.Execute()
  Do While Not rs.EOF
    MsgBox rs.Fields(0).Value
    rs.MoveNext
  Loop
  If con.Errors.Count > 0 Then
    MsgBox con.Errors(0).Description
  End If
  rs.Close
  Set rs = Nothing
  Set cmd = Nothing
  con.Close
  Set con = Nothing
=======================================================

我在PL/SQL里测试这个过程,运行成功,但VB的代码来连接测试出现这个错误:
==================================================
err.Number :-2147217872
err.Description :类型名称无效。
=================================================
请问是什么原因?
  



__________________
我每天都觉得很累。。。。。。
只看该作者    顶部
离线 ericlma
中级会员



精华贴数 0
个人空间 0
技术积分 274 (7206)
社区积分 0 (49256)
注册日期 2001-11-16
论坛徽章:1
授权会员     
      

发表于 2002-1-15 11:48 
You should not and cannot bind to a REF CURSOR datatype in ADO.  Please remove this line:

Set Param1 = cmd.CreateParameter("result", adPropVariant, adParamOutput)
cmd.Parameters.Append Param1  

Also, you are using ODBC driver, not OLE DB provider.  Are you sure ODBC supports returning a cursor variable as an ADO recordset?


只看该作者    顶部
离线 yzf01
中级会员


精华贴数 0
个人空间 0
技术积分 1183 (1529)
社区积分 640 (1252)
注册日期 2001-11-19
论坛徽章:11
2008北京奥运纪念徽章:赛艇2008北京奥运纪念徽章:花样游泳2008北京奥运纪念徽章:曲棍球生肖徽章2007版:猪2008年新春纪念徽章生肖徽章2007版:鸡
      

发表于 2002-1-15 12:00 
Thank for you  help. ODBC supports returning a cursor variable as an ADO recordset.
My procedure first param is out cursor,please tell me which ado param mapping oracle cursor variable?
If I use OLE DB drive call oracle procedure in vb code,How to wirte  vb code to call  my upper procedure?


__________________
我每天都觉得很累。。。。。。
只看该作者    顶部
离线 ericlma
中级会员



精华贴数 0
个人空间 0
技术积分 274 (7206)
社区积分 0 (49256)
注册日期 2001-11-16
论坛徽章:1
授权会员     
      

发表于 2002-1-15 12:18 
If you use the Oracle OLD DB provider the connection string will look like:

PROVIDER=OraOLEDB.Oracle;DATA SOURCE=<the_tnsnames_string>;USER ID=scott;PASSWORD=tiger;PLSQLRSet=1


只看该作者    顶部
离线 ericlma
中级会员



精华贴数 0
个人空间 0
技术积分 274 (7206)
社区积分 0 (49256)
注册日期 2001-11-16
论坛徽章:1
授权会员     
      

发表于 2002-1-15 12:21 
I wrote some sample code 2 years ago, which you can find here.  However, OLE DB providers have been improved a lot since then, and you should consult the lastest articles from M$FT knowledge base and ORCL production documentation.


只看该作者    顶部
离线 yzf01
中级会员


精华贴数 0
个人空间 0
技术积分 1183 (1529)
社区积分 640 (1252)
注册日期 2001-11-19
论坛徽章:11
2008北京奥运纪念徽章:赛艇2008北京奥运纪念徽章:花样游泳2008北京奥运纪念徽章:曲棍球生肖徽章2007版:猪2008年新春纪念徽章生肖徽章2007版:鸡
      

发表于 2002-1-15 12:38 
Thank you,Your sample solve my probleam.


__________________
我每天都觉得很累。。。。。。
只看该作者    顶部
离线 yzf01
中级会员


精华贴数 0
个人空间 0
技术积分 1183 (1529)
社区积分 640 (1252)
注册日期 2001-11-19
论坛徽章:11
2008北京奥运纪念徽章:赛艇2008北京奥运纪念徽章:花样游泳2008北京奥运纪念徽章:曲棍球生肖徽章2007版:猪2008年新春纪念徽章生肖徽章2007版:鸡
      

发表于 2002-1-15 14:15 
Why I use ole db drive connect oracle ,execute procedure always pop error.
-----------------------------------------------------------------------------------------------------
ORA-06550: 第 1 行, 第 7 列:
PLS-00306: 调用 'SP_FINDOBJID' 时参数数量或类型错误
ORA-06550: 第 1 行, 第 7 列:
PL/SQL: Statement ignored
---------------------------------------------------------------------------------------------------------------------

when  I use odbc connect oracle,the error did not generation.
My connection string is :
---------------------------------------------------------------------------------------------------------
con.Open "PROVIDER=OraOLEDB.Oracle;DATA SOURCE=rome;USER ID=rome;PASSWORD=manager;PLSQLSET=1"
-------------------------------------------------------------------------------------------------------
why?


__________________
我每天都觉得很累。。。。。。
只看该作者    顶部
离线 ericlma
中级会员



精华贴数 0
个人空间 0
技术积分 274 (7206)
社区积分 0 (49256)
注册日期 2001-11-16
论坛徽章:1
授权会员     
      

发表于 2002-1-16 09:29 
I hope you typed in PLSQLRSet=1, not PLSQLSet=1.  BTW, I am interested in knowing whose (ORCL or M$FT) ODBC driver you are using and the version number.


只看该作者    顶部
离线 yzf01
中级会员


精华贴数 0
个人空间 0
技术积分 1183 (1529)
社区积分 640 (1252)
注册日期 2001-11-19
论坛徽章:11
2008北京奥运纪念徽章:赛艇2008北京奥运纪念徽章:花样游泳2008北京奥运纪念徽章:曲棍球生肖徽章2007版:猪2008年新春纪念徽章生肖徽章2007版:鸡
      

发表于 2002-1-16 14:22 
Thank you very much! Now it is ok.but, when close cursor after complete  cmd.execute procedure. How to close cursor?


__________________
我每天都觉得很累。。。。。。
只看该作者    顶部
离线 蓝带鱼
中级会员


精华贴数 0
个人空间 0
技术积分 608 (3192)
社区积分 407 (1631)
注册日期 2001-11-9
论坛徽章:3
ITPUB元老会员2006贡献徽章授权会员   
      

发表于 2002-1-16 16:02 
游标名.close
而后 set  游标名=nothing 释放内存


__________________
横批:全面发展左脑负责发帖右脑负责灌水bluebluefish@itpub.net
只看该作者    顶部
相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问