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语句是正常的,请问为什么????
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语句是正常的,请问为什么????
AS
begin
SET NOCOUNT ON;--必须加上
select 语句
SET NOCOUNT OFF;必须加上
endGO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
采用oledb连接的时候 默认情况 SET NOCOUNT Off
因此会造成存储过程不能返回记录集(算是odledb bug)
只要显示的设置就可以了
zyg0,用你的方法解决问题。