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、存储过程里将最终的结果写入表中
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 --……其它处理的 --将数据写入结果表,存储过程中不做查询
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