Set cn = New Connection
cn.CursorLocation = adUseClient cn.Open "PROVIDER=SQLOLEDB;datasource=202.188.77.21;uid=sa;pwd=123456;database=pub"
Set res = New Recordset
res.open "exec sppsn_cal",cn
if res.eof then  ----(这里报错了,对象关闭时,不允许操作)
...
end if其中sppsn_cal是一个存储过程,最后是要返回一个结果集的。如果我用如下语句:
Set cn = New Connection
cn.CursorLocation = adUseClient
cn.Open "PROVIDER=MSDASQL;dsn=cal;uid=sa;pwd=123456;"
Set res = New Recordset
res.open "exec sppsn_cal",cn
if res.eof then 
...
end if就不会报错。但如果用这种做法就要手工配置ODBC数据源,所以我想用第一种方法,可是一调存储过程就报这样的错,如果只是调SQL语句是正常的,请问为什么????

解决方案 »

  1.   

    create  PROCEDURE 存储过程名
    AS
    begin
    SET NOCOUNT ON;--必须加上
    select 语句
    SET NOCOUNT OFF;必须加上
    endGO
    SET QUOTED_IDENTIFIER OFF 
    GO
    SET ANSI_NULLS ON 
    GO
      

  2.   

    SET NOCOUNT ON
    采用oledb连接的时候 默认情况 SET NOCOUNT Off
    因此会造成存储过程不能返回记录集(算是odledb bug)
    只要显示的设置就可以了
      

  3.   

    最好用adocommand来执行存储过程
      

  4.   

    谢谢各位答复~
    zyg0,用你的方法解决问题。