收录日期:2020/02/20 18:52:23 时间:2016/05/27 16:35:07 标签:数据库(包含打印,安装,报表)
一、程序功能:
   1、利用存储过程将一张表内数据按不同条件汇总,并插入到一临时表中;
   2、在VB中将存储过程中的临时表数据,调入到Recordset记录集

二、问题:
   在运行到  Set adors1 = cntcmd.Execute   时出现实时错误 3704,“对象关闭时,操作不被允许”。

三、程序清单:
   1、存储过程:
create proc t_colour
as
begin
    /*创建临时表,用于存储返回结果集*/
    create table #tmp
    (
        tmp_ballno        CHAR(2),
        tmp_redcnt        integer,
        tmp_bluecnt       integer,
        tmp_happycnt   integer
    )

    declare @redcnt   integer,
            @bluecnt  integer,
            @happycnt integer

    DECLARE @i        INTEGER,
            @cnt      integer,
            @iChar    char(2)

    select @i = 1

    WHILE @I <= 30    /*汇总01至30的数据*/
      BEGIN 
         IF @i < 10 
            select @iChar = '0' + ltrim(rtrim(str(@i)))
         else
            select @iChar = ltrim(rtrim(str(@i)))

         SELECT @redcnt = count(*) from t_ball where redball like '%' @iChar + '%'
         SELECT @bluecnt = count(*) from t_ball where blueball = @i
         SELECT @happycnt = count(*) from t_ball where happyball = @i

         insert into #tmp(tmp_ballno, tmp_redcnt, tmp_bluecnt, tmp_happycnt)
                values (@iChar, @redcnt, @bluecnt, @happycnt)

         select @i = @i + 1
      END

    select * from #tmp
end

   2、vb中的程序
Private Sub Command1_Click()
    Dim i As Integer
    Dim cntcmd As ADODB.Command
    Dim adors1 As ADODB.Recordset

    Set cntcmd = New ADODB.Command
    With cntcmd
        .ActiveConnection = cn
        .CommandType = adCmdStoredProc
        .CommandText = "t_colour"
    End With
   
    Set adors1 = New ADODB.Recordset
    Set adors1 = cntcmd.Execute

End Sub
   

这样试试
 Dim rs As ADODB.Recordset
    Dim cmd As ADODB.Command
    Dim param As ADODB.Parameter
    
    Set rs = New ADODB.Recordset
    Set cmd = New ADODB.Command
    cmd.ActiveConnection = mConn
    cmd.CommandText = "select_users"
    cmd.CommandType = adCmdStoredProc
    
    mConn.CursorLocation = adUseClient '设置为客户端

    Set rs = cmd.Execute()

    MsgBox rs.RecordCount
    Set DataGrid1.DataSource = rs
    DataGrid1.Refresh
感谢你的回复,但运行到MsgBox adors1.RecordCount 时还是出现同样的 实时错误 3704
我分不够用,回答了还请给分
Private Sub Command1_Click()
    Dim i As Integer
    Dim cntcmd As ADODB.Command
    Dim adors1 As ADODB.Recordset
'你的cn一直没打开,确定你的cn的连接字符串是正确的,然后在下面加这句
    cn.open
    Set cntcmd = New ADODB.Command
    With cntcmd
        .ActiveConnection = cn
        .CommandType = adCmdStoredProc
        .CommandText = "t_colour"
    End With
   
    Set adors1 = New ADODB.Recordset
    Set adors1 = cntcmd.Execute

End Sub
我的CN是打开的,在Form_Load中已打开,但运行到调用记录集时,就出表3704错误,不知为什么,如果我的存储过程中只有一条SELECT语句,则VB程序可以PASS. 请问如何给分,我是第一次上这个论坛?
学习
mark
我想可能是你的存储过程创建了一个表,所以不能将他返回到RECORDSET。先试一下不要创建表,只是查询。再慢慢找问题吧。
那你只能先把存储过程的内容放到查询分析器里
一点点的执行
如果结果正确有记录集的话,那么就是连接的问题了
存储过程应没有问题,我在QUERY ANALYZER运行有正确的记录集。我想有可能是在VB程序中有问题,但不知问题在哪?
谁能告诉我这是什么问题?

为什么我的网速只有21K 先放2500分! 哪款845GL支持533外频或内存异步? 硬盘格式的转换 先放2500分! 如何用VC编写代码以便在SQL中存储图片(JPG或GIF、BMP格式),有相关的书籍吗? 紧争求救!!!紧争求救!!!紧争求救!!!紧争求救!!! 先放2500分! 哪位大哥给小妹指点几本unix环境下c编程的书呀,最好加上下载地址 先放2500分! 先放2500分! 先放2500分! 先放2500分! *******高分求征(各位进来看看)******** 先放2500分! 问高手:如何截收通过服务器的数据包并进行简单分析? 先放2500分! 先放2500分! 电话网的组建 如何在PB程序中改变屏幕的分变率?(60分) 回来看看,出差现在怎么一点也不好了 holding an English Corner--come on and talk in English here! 请问如何恢复删除的数据? 钱,我要你来干嘛?我们到底需要多少钱?真正需要的是什么? 请教为什么update出错! *******高分求征(各位进来看看)******** 有关内存的思考题,help me 请问怎么实现IE菜单中“工具”选项中“Internet选项”中的所有功能 PageControl中的一个小问题????????? 那位高人能提供wise installer的教程给我,谢谢了!