SQL的储存过程:
CREATE       proc vertex_sg_jcjb(
@jc char(3), 
@rq char(10)) 
AS 
BEGIN TRANSACTIONbegin
update sg_bld set sg_bld.结存=@jc where convert(varchar(7),sg_bld.出库日期,121)=@rq
update sg_lld set sg_lld.结存=@jc where convert(varchar(7),sg_lld.出库日期,121)=@rq
update sg_rkd set sg_rkd.结存=@jc where convert(varchar(7),sg_rkd.入库日期,121)=@rq
update sg_sld set sg_sld.结存=@jc where convert(varchar(7),sg_sld.收料日期,121)=@rq 
update sg_tld set sg_tld.结存=@jc where convert(varchar(7),sg_tld.退料日期,121)=@rq
COMMIT TRANSACTION
if @@error > 0
   rollback tran 
end
DELPHI中是用ADOStoredProc来调用的.
with sp1 do
  begin
    close;
    prepared:=false;
    procedurename:='vertex_sg_jcjb;1';
    parameters.Refresh ;
    parameters.ParamByName('@jc').Value:=trim(edit1.text);
    parameters.ParamByName('@rq').Value :=trim(edit2.text);
    execproc;
  end;
GO问题:
   如何设置储存过程,让其反回是否回滚(@@error的值)到ADOStoredProc中,再在DELPHI中提示是否成功.
  

解决方案 »

  1.   

    在存儲過程裏應該是  if @@transCount >0  rollback;
      

  2.   

    CREATE      proc vertex_sg_jcjb( 
    @jc char(3), 
    @rq char(10)) 
    AS 
    BEGIN TRANSACTION begin 
    update sg_bld set sg_bld.结存=@jc where convert(varchar(7),sg_bld.出库日期,121)=@rq 
    update sg_lld set sg_lld.结存=@jc where convert(varchar(7),sg_lld.出库日期,121)=@rq 
    update sg_rkd set sg_rkd.结存=@jc where convert(varchar(7),sg_rkd.入库日期,121)=@rq 
    update sg_sld set sg_sld.结存=@jc where convert(varchar(7),sg_sld.收料日期,121)=@rq 
    update sg_tld set sg_tld.结存=@jc where convert(varchar(7),sg_tld.退料日期,121)=@rq 
    COMMIT TRANSACTION 
    return 0;
    if @@error > 0 
      rollback tran 
      return -1
    end DELPHI中是用ADOStoredProc来调用的. 
    with sp1 do 
      begin 
        close; 
        prepared:=false; 
        procedurename:='vertex_sg_jcjb;1'; 
        parameters.Refresh ; 
        parameters.ParamByName('@jc').Value:=trim(edit1.text); 
        parameters.ParamByName('@rq').Value :=trim(edit2.text); 
        execproc; 
      end; 
    GO  通過取REUTN的返回值來判斷
      

  3.   

    TO:starluck 
      是取储存过和的反回值,还是储存过程中事务的反回值.
      是这样吗:sp1.Excute('vertex_sg_jcjb',cmdStoredProc,eoAsyncExecute)
      

  4.   


    var
      sql : String;  sql := 'delcare @a int  execute procname  select @a ';
      adoquery1.close;
      adoquery1.sql.text := sql ;
      adoquery1.open;
      showMessage(Adoquery1.fields[0].asstring);