您的位置:程序门 -> vb -> 数据库(包含打印,安装,报表)



存储过程返回记录集时提示“对象关闭时,不允许操作。”


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


存储过程返回记录集时提示“对象关闭时,不允许操作。”
发表于:2007-06-25 11:34:44 楼主
create   procedure   sa_fhjs
( /*   发货统计表数据组织存储过程     */

@chrwhere1     varchar(255)   =null   ,         /*通用条件     */
@chrchecked   varchar(50)   =   null   ,     /*发货单是否审核条件   */
@chrstartdate   varchar(20)     =   null   ,   /*开始日期   ,标准的日期值   yyyy-mm-dd*/  
@chrenddate   varchar(20)     =     null   ,       /*结束日期,标准的日期数值   */  
@chrauth   varchar(2500)   =   null     ,  
@chrrecordauth   varchar(8000)   =   null   --记录权限条件    
        )
as  
set   nocount   on
----创建临时表用来把sa_cutstock中的数据读到临时表中
create   table   #tmp1   (cinvcode   varchar(20),cinvaddcode   varchar(20),cinvname   varchar(100),cinvstd   varchar(50),cinvm_unit   varchar(30),
cinva_unit   varchar(30),cinvdefine1   varchar(30),cinvdefine2   varchar(30),cinvdefine3   varchar(30),cinvdefine4   varchar(30),cinvdefine5   varchar(30),
cinvdefine6   varchar(30),cinvdefine7   varchar(30),cinvdefine8   varchar(30),cinvdefine9   varchar(30),cinvdefine10   varchar(30),cinvdefine11   varchar(30),
cinvdefine12   varchar(30),cinvdefine13   varchar(30),cinvdefine14   varchar(30),cinvdefine15   varchar(30),cinvdefine16   varchar(30),igrouptype   bit,cinvccode   varchar(20),cinvcname   varchar(50),
iexchrate   float,iqtty   float,inum   money,   istopqtty   float,istopnum   money,finqtty   float,finnum   money,   ftransinqtty   float,ftransinnum   money,
finqttysum   money,finnumsum   money,foutqtty   float,   foutnum   money,ftransoutqtty   float,   ftransoutnum   money,foutqttysum   money,   foutnumsum   money,
fdisableqtty   float,fdisablenum   money,favailqtty   float,favailnum   money)
insert   #tmp1   EXEC   sa_cutstock-----把数据读到临时表中
---创建临时表用来把sa_saleout中的数据读到临时表中
create   table   #tmp2   ([部门]   varchar(50),[客户]   varchar(50),[业务员]   varchar(50),[业务类型]   varchar(50),[销售类型]   varchar(50),
[存货编码]   varchar(20),[日期]   datetime,[发退货单号]     varchar(20),[币种]   varchar(20),[仓库]   varchar(50),[存货代码]   varchar(20),
[期初件数]   float,[批号]   varchar(50),[期初数量]   float,[期初金额]   money,[期初金额本币]   money,[期初税额]   money,[期初税额本币]   money,
[期初价税合计]   money,[期初价税合计本币]   money,[期初折扣]   money,[期初折扣本币]   money,[发货数量]   float,[发货件数]   float,[发货金额]   money,
[发货金额本币]   money,[发货税额]   money,[发货税额本币]   money,[发货价税合计]   money,[发货价税合计本币]   money,[发货折扣]   money,[发货折扣本币]   money,
[开票数量]   float,[开票金额]   money,[开票金额本币]   money,[开票税额]   money,[开票税额本币]   money,[开票价税合计]   money,[开票价税合计本币]   money,
[开票折扣]   money,[开票折扣本币]   money,[结存数量]   float,[结存金额]   money,[结存税额]   money,[开票件数]   float,[结存价税合计]   money,
[结存件数]   float,[结存折扣]   money,[结存金额本币]   money,[结存税额本币]   money,[结存价税合计本币]   money,[结存折扣本币]   money,
[项目大类]     varchar(50),[项目]   varchar(50),[cdefine11]   varchar(50),[cdefine12]   varchar(50),[cdefine13]   varchar(50),[cdefine14]   varchar(50),
[cdefine15]   varchar(50),[cdefine16]   varchar(50),[cdefine28]   varchar(50),[cdefine29]   varchar(50),[cdefine30]   varchar(50),
[cdefine31]   varchar(50),[cdefine32]   varchar(50),   [cdefine33]   varchar(50),[cdefine34]   varchar(50),[cdefine35]   varchar(50),
[cdefine36]   varchar(50),[ccccode]   varchar(50),[cinvccode]   varchar(50),[cdccode]   varchar(50),[cfree1]   varchar(50),[cfree2]   varchar(50),
[cfree3]   varchar(50),[cfree4]   varchar(50),[cfree5]   varchar(50),[cfree6]   varchar(50),[cfree7]   varchar(50),[cfree8]   varchar(50),
[cfree9]   varchar(50),[cfree10]   varchar(50)   )
insert   #tmp2   EXEC   sa_saleout   @chrwhere1,@chrchecked,@chrstartdate,@chrenddate,@chrauth,@chrrecordauth
set   nocount   off
select   cinvcode   as   [存货编码],cinvaddcode   as   [存货代码],cinvname   as   [存货名称],[部门],[客户],[业务员],[业务类型],[销售类型],[日期],[发退货单号],[币种],[仓库],cinvstd   as   [规格型号],cinvm_unit   as   [计量单位],cinva_unit   as   [辅计量单位],#tmp1.cinvccode   as   [分类编码],cinvcname   as   [分类名称],[发货数量],[发货数量]-iqtty   as   [剩余数量],favailqtty   as   [可用数量]   from   #tmp1   left   join   #tmp2   on   #tmp1.cinvcode   =   #tmp2.[存货编码]
return
上面是一个存储过程。这个存储过程在“查询分析器”能够正常使用。
下面是我在vb中使用的语句:
dim   rs   as   new   adodb.recordset
set   rs   =   conn.EXECute(“EXEC   sa_fhjs   ' ', ' ', '2005-01-01 ', '2005-06-25 ', ' ', ' '”)
if   not   rs.eof   then----在这里提示“对象关闭时,不允许操作。”
        tj   =   rs.fields(0).value
end   if
rs.close


发表于:2007-06-25 11:45:241楼 得分:0
你把return去掉
把set   nocount   off放到return的位置
加個go
发表于:2007-06-25 12:42:432楼 得分:0
楼上的谢谢你,但是我这样做了还是不行啊?
发表于:2007-06-25 13:10:153楼 得分:0
dim   cmd   as   new   adodb.command
         
      with   cmd
                .activeconnection   =   conn
                .commandtext   =   "totalhour "     '存儲過程名
                .commandtype   =   adcmdstoredproc '類型為調用存儲過程
                .commandtimeout   =   0
                .parameters( "@lgkeyindex ")   =   "1 "   '給參數賦值
                .parameters( "@p_no ")   =   "2 "
                .parameters( "@drawgno ")   =   "3 "
                .parameters( "@mac_name ")   =   "4 "
        end   with
        set   rs   =   cmd.EXECute

      你把return去掉
      把set   nocount   off放到return的位置
      加個go

你用這種方式試一下,以前我也碰到過這種情,看這樣能不能解決,如果不是還行,
隻有請其它高手了
发表于:2007-06-25 14:08:474楼 得分:0
不熟悉存储过程啊,帮你顶顶吧
发表于:2007-06-25 14:41:315楼 得分:0
有這種錯誤提示是因為rs.excute執行之後,rs並沒有得到存儲過程中select語句執行
後的數據集,原因可能是存儲過程中有多個select語句,rs無法確定要接收哪個select
執行的數據集
個人意見,請高手指點
发表于:2007-06-25 16:15:426楼 得分:0
但是在查询分析器中可以执行,返回也是一个表啊.
发表于:2007-06-25 16:29:317楼 得分:0
在查询分析器中是可以正確執行,返回來也是一個表,
但就是不明明白為什rs得不到這個數據集
我也碰到過,後來是加了個
set   nocount   on
set   nocount   off
解決了,好象是說在存儲過程中每執行一條sql語句就會返回一個什麼值
如果有多個sql語句就會返會多個數值集,rs不能正確獲得最後那個
sql語句執行後的數據集,就出現你所見的錯誤提示
不過你可以用一個比較笨的方法,把結果先保存到表中
sql   rs重新調用了
发表于:2007-06-26 10:35:348楼 得分:0
帮顶
发表于:2007-06-26 13:47:119楼 得分:0
你的存储过程有问题,在查询分析器中执行看看就知道了。
发表于:2007-06-26 13:54:1110楼 得分:0
当存储过程有问题,执行时出现类似set或聚合删除空值之类的提示时,vb就会认为存储过程执行不成功,没有返回值了。所以关键是存储过程得没有任何一点错误才行。
发表于:2007-06-26 17:49:3111楼 得分:0
幫頂........
我也很想知道是什麼原因
因為了以前我也碰到過這樣的問題,在查詢分析器中能正確得到結果
但rs   就是得不能最後執行的數據集
发表于:2007-06-26 18:00:2212楼 得分:0
set   nocount   on
set   nocount   off
似乎有用
发表于:2007-06-26 21:52:1113楼 得分:0
insert   #tmp2   EXEC   sa_saleout   @chrwhere1,@chrchecked,@chrstartdate,@chrenddate,@chrauth,@chrrecordauth

你这个存在过程是不是有返加数据集,你在
insert   #tmp1   EXEC   sa_cutstock 
与insert   #tmp2   EXEC   sa_saleout   @chrwhere1,@chrchecked,@chrstartdate,@chrenddate,@chrauth,@chrrecordauth
后面最加上go试试看
发表于:2007-06-27 10:21:4814楼 得分:0
幫頂......


快速检索

最新资讯
热门点击