vb 中recordset提示对象关闭时不允许操作

vb中执行查询后,一般要判断是否为空,只要执行的查询执行了select,都可以用rs.eof 或者 rs.recordcount来判断,

但是,如果执行的sql中加了逻辑判断,导致没有执行任何select语句,则用rs.eof 或者rs.crcordcount来判断,系统就会提示

对象关闭时无法操作。

eg1:

 

delare @a int
set @a=1
if @a=0
   select @a

说明:如果是执行该脚本,用rs.eof进行判断时,系统就会报对象关闭错误,因为没有执行任何select查询,没有返回任何内容。  

eg2:

select *
into #itemno3
from seorder a
    inner join seorderentry b on a.finterid = b.finterid
    
where fbillno = @fbillno
--……其它处理的

select * from #itemno3

说明:上面这段如果是执行该脚本,用rs.eof进行判断时,系统也会报对象关闭错误,因为开始没有执行任何select查询,没有返回任何内容。

 

解决办法:

1、存储过程里将最终的结果写入表中

if exists (select 1 from sysobjects where xtype = 'U' and name = 'itemno3')
    drop table itemno3
select *
into itemno3
from seorder a
    inner join seorderentry b on a.finterid = b.finterid
    
where fbillno = @fbillno
--……其它处理的

--将数据写入结果表,存储过程中不做查询
View Code

 

2、VBA中执行完存储过程后,再单独执行查询结果表

 sql = "exec rk_sp_huizong  " & FItemID
    
    Set rs = ExecSql(sql)
    
sql="select * from [结果表]"
set rs= ExecSql(sql)

'下面再做判断就不会提示对象关闭时不允许操作了
 If rs.RecordCount > 0 Then

end if

 

posted @ 2016-06-17 11:14  码写人生  阅读(5557)  评论(0编辑  收藏  举报