我用query调用存储过程,代码如下:
 with dmdatabase.qry_average do
 begin
   close;
   sql.clear;
   sql.Add('exec str_writeaverage :classno' + ',' + ':term');
   parambyname('classno').AsString := edtclassid.Text;
   parambyname('term').AsString := edtterm.Text;
   prepare;
   open;
 end;
执行时报错:error create cursor handle
我换成存储过程也报同样的错误,
请问为什么?

解决方案 »

  1.   

    我的存储过程代码如下:CREATE PROCEDURE str_writeaverage  @classno char(8),@term char(5)AS   --
    --定义变量
    --declare @classno char(8)set @classno = '20000573'set @term = '20022'declare @term char(5)
    declare @studentno char(10)
    declare @average float
    declare @tsum float--取@tsum值
    select @tsum = tsum from view_sum
    where classno = @classno and term = @term
    --定义游标,取出平均分
    declare cur_average  cursor  for 
    select sum(Single)/@Tsum,StudentNo  
    from Achievement 
    where ClassNo=@Classno and term=@Term
    group by StudentNo
    ---打开游标
    begin tran
    open cur_average
        fetch next from cur_average into @average,@studentno
        while @@fetch_status = 0
        begin
            update Achievement
            set Average=@Average
            where StudentNo=@Studentno and ClassNo=@Classno and term=@Term
             fetch next from  cur_average into @average,@studentno
        end
    ---关闭游标
        close cur_average
        deallocate cur_average
        if @@error <> 0
            rollback tran
    commit tran
    GO
      

  2.   

    declare cur_average  cursor  for 
    select sum(Single)/@Tsum,StudentNo  
    from Achievement 
    这段换成declare cur_average  cursor  for 
    select sum(Single)/@Tsum as Pjf,StudentNo  
    from Achievement 试试