收录日期:2020/09/26 00:12:59 时间: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程序中有问题,但不知问题在哪?
谁能告诉我这是什么问题?

版主来看看。。!再散分~~!进者有分,分数不够再加!~我散。。! (急)面试题:批量更改数据库中的数据(oracle) 在线等待中…… 好久没来,再次忏悔下... 100分求助正解 用驱动程序中DebugPrint/KdPrint写的调试信息,在DebugView中无显示出调试信息 最后的10分用完归0了,但是我一点也不担心! 计算经纬度 一个“猫扑”、一个“天涯”!中国两个最大的网络垃圾坑! PB 求中英文混合字符长度 的函数 VB工具报SQL拒绝访问 webclient.UploadData 操作超时 C#里treeview显示问题 C# 鼠标右键 请教TreeView节点的值添加到GridView中 aspnetpager 在firefo浏览器中出现版本号? 请问一个C#特效问题! java Thread怎么执行cmd命令 从数据库读取记录,float的值为什么为空 Discuz7.0数据库结构参考 PDF生成方法大讨论 enum 枚举 当参数指针,怎么用? C++程序设计问题 wince下time的api??? 本子是干啥用的,就是一把开启消遣滴钥匙 如果我的DOS客户机已经与NOVELL服务器连接了,怎么让他们传命令? TreeView中文乱码问题 关于vs2005创建智能设备项目的问题 一个form 能否提交给不同的页面? 谁有 VC++关于用HSI分量细胞计数的 代码 谢谢 VC