关于调用存储过程的问题,请各位高手指点一二!!!

aiiitang 2004-05-05 02:41:40
一、程序功能:
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


...全文
31 10 点赞 打赏 收藏 举报
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
aiiitang 2004-05-06
存储过程应没有问题,我在QUERY ANALYZER运行有正确的记录集。我想有可能是在VB程序中有问题,但不知问题在哪?
  • 打赏
  • 举报
回复
aiiitang 2004-05-06
谁能告诉我这是什么问题?
  • 打赏
  • 举报
回复
wzdwzd 2004-05-06
那你只能先把存储过程的内容放到查询分析器里
一点点的执行
如果结果正确有记录集的话,那么就是连接的问题了
  • 打赏
  • 举报
回复
harryho 2004-05-05
我想可能是你的存储过程创建了一个表,所以不能将他返回到RECORDSET。先试一下不要创建表,只是查询。再慢慢找问题吧。
  • 打赏
  • 举报
回复
daisy8675 2004-05-05
mark
  • 打赏
  • 举报
回复
limitworld 2004-05-05
学习
  • 打赏
  • 举报
回复
aiiitang 2004-05-05
我的CN是打开的,在Form_Load中已打开,但运行到调用记录集时,就出表3704错误,不知为什么,如果我的存储过程中只有一条SELECT语句,则VB程序可以PASS. 请问如何给分,我是第一次上这个论坛?
  • 打赏
  • 举报
回复
wzdwzd 2004-05-05
我分不够用,回答了还请给分
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
  • 打赏
  • 举报
回复
aiiitang 2004-05-05
感谢你的回复,但运行到MsgBox adors1.RecordCount 时还是出现同样的 实时错误 3704
  • 打赏
  • 举报
回复
online 2004-05-05
这样试试
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
  • 打赏
  • 举报
回复
相关推荐
发帖
数据库(包含打印,安装,报表)
加入

1190

社区成员

VB 数据库(包含打印,安装,报表)
申请成为版主
帖子事件
创建了帖子
2004-05-05 02:41
社区公告
暂无公告