我的程序里adoconnection的事务,和storedprocedure一起这样用可以吗?
这个存储过程里有create table,drop table,select into,insert,update,delete等语句
涉及到很多表,如果启用了事务保护,第一个事务的create table会不会被第二个事务的
drop table 除去?如果我不想让第二个事务在此浪费时间等待,让它一遇到被第一个事务
锁定的对象就立即撤销操作,请问在delphi或者sql里应该怎么解决?
 
     MXSP.Close;
     MXSp.ProcedureName := 'USP_MX_TABLE';
     mxsp.Parameters.Refresh;
     mxsp.Parameters.ParamValues['@cur_mon'] := Agx_cur;
     mxsp.Parameters.ParamValues['@last_mon'] := Agx_last;
     
     mxsp.Parameters.ParamValues['@bef_last_mon'] := Agx_bef_last;     
     mxsp.Prepared := true;
     
   try
     adoconnection1.BeginTrans;
     Jbmxsp.ExecProc;
     adoconnection1.CommitTrans;
   except     end;

解决方案 »

  1.   

    写了一堆,没仔细看,简单说一点事务是什么,如何用通常我们使用事务,对应的是一组需要保护的执行,这组执行要么不执行,要么全部执行,你要抓住这个基本原则。单独看
      adoconnection1.BeginTrans;
         Jbmxsp.ExecProc;
         adoconnection1.CommitTrans;那么jbmxsp这个存储过程要就全部执行,要就都不执行至于存储过程中的实现,是在服务器端执行的,可能你的存储过程中也会涉及到事务,这种事务的保护也是在被服务器实现的,例如用sql server。【如果启用了事务保护,第一个事务的create table会不会被第二个事务的
    drop table 除去?】
    第一个事务的create table等一组操作被一个事务保护,他要么就全部执行要就不执行
    第二个也一样。你再往后的一些问题,看的实在有点晕,乱七八糟的,你把我带沟里了。
      

  2.   

    不好意思 是不我没说明白,因为对于这个问题我很糊涂
    你说的我大部分明白了,但是还有个问题要问清楚一些。。请不要闲我罗唆。。
    是不是 第二个 事务要等第一个事务完成后才执行?那么是不是又把第一个事务的操作重复了一遍?我不想让它等,发现不能操作就退出,这在delphi里怎么设置?
      

  3.   

    还有一个重要的一点:
    在事务中不要用create,truncate,drop 这样的语句,因为事务会自动提交
      

  4.   

    wudi_1982,我朋友在中山需要高人.你可发邮件[email protected],他再跟你联系