zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    log4j日志配置
    map和java对象的转换方法
    阿里巴巴的json使用时的一些转换方法
    HttpClient发送Post和Get请求
    IT网站导航
    python学习
    git解决冲突
    协程
    Python实现协程
    异步任务神器 和定时任务Celery
  • 原文地址:https://www.cnblogs.com/fm168/p/5593425.html
Copyright © 2011-2022 走看看