刚刚学习存储过程写了如下代码
REATE PROCEDURE wys 
@id char(10)

ASbegindeclare @return money   
--declare @res varchar(20)
select @return=sfje.je  from sfje where janz=@id  
    if @return is not null 
    begin 
    select * from sfje where janz=@id    
   end    
end;
调试通过后 
我在DELPHI中用到了一个QUERY调用该过程 在句子中用到了OPEN 
但是当表中没有查询值是报错‘ create curoser  error'! 
我想主要是当没有查询值没有返回值 可是如何才能解决呢?

解决方案 »

  1.   

    query可以使用存储过程吗?为什么不使用tstoredproc?
      

  2.   

    tstoredproc
    不能返回结果集的! 
    而且TQUERY当然能使用存储过程!
      

  3.   

    1。你的存储过程返回了结果集吗?如果有,ADOStoredProc绝对可以
    2。没有结果集,query也不行
      

  4.   

    你的存储过程的select语句最好不要写到if语句里,实际上你可以在条件不成立的情况下,再设一变量来进行对select的条件进行控制就可以了。
      

  5.   

    另外,为了防止万一,你最好使用TStoredProc来进行存储过程的执行。
      

  6.   

    我在窗体上放置了一个DBGRID控件和一个dbsoruce控件 让dbsoruce连接DBGRID和TStoredProc写了如下代码但是DBGRID并无返回
    StoredProc1.Params[0].AsString := Edit1.Text;
    StoredProc1.Prepare;
    StoredProc1.ExecProc;
    到底是哪里错了? 
    还有如果能返回如何如何能像tquery的fieldbyname那样使用?
      

  7.   

    StoredProc1.Params[0].AsString := Edit1.Text;
    StoredProc1.active:=true;