BatchMove本身有事务,给我的程序写法产生了BUG,
try
  database1.StartTransaction;//事务开始
  tabSou.TableName := 'tb111'; tabDes.TableName := 'tba222';
  tabDes.EmptyTable; BatchMove1.Execute ;//BatchMove1把事务给关了  tabSou.TableName := 'tb333'; tabDes.TableName := 'tba444';
  tabDes.EmptyTable; BatchMove1.Execute ;  ........  //要用TQ执行INSERT操作  database1.Commit;//程序报错(没有事务!)
except
  database1.Rollback;
end;//BatchMove一定要放在事务里面,因为这是一串操作
DELPHI版的老兄可有办法 解决,让BatchMove不开启它的事务呢?

解决方案 »

  1.   

    为什么要把处理这个写在database1.StartTransaction;事务处理过程中呢?以前用的时候倒是没有注意过,(这个东东不是很好用,现在已经不用了.......)要是为解决问题呢,写在外面好了:try
      tabSou.TableName := 'tb111'; tabDes.TableName := 'tba222';
      tabDes.EmptyTable; BatchMove1.Execute ;//BatchMove1把事务给关了  tabSou.TableName := 'tb333'; tabDes.TableName := 'tba444';
      tabDes.EmptyTable; BatchMove1.Execute ;
    except
      messagebox(...'数据转移失败'....)
    end;try
      database1.StartTransaction;
      ...
    finally
    end;
      

  2.   

    if Database1.inTransactioned then
       database1.Commit
      

  3.   

    还是自己写一些SQL语句进行数据的批移动吧,这样控制得更灵活些。
      

  4.   

    //BatchMove一定要放在事务里面,因为这是一串操作这是一开始时我就强调的,至于 为什么
    其实也很简单;因为一个功能 操作,可能要关联好多表,if Database1.inTransactioned then
       database1.Commit
    //能解决问题吗
    //只是没有出现我说的BUG,但是会有更大BUG
    //因为也许开始时的两张资料表,BatchMove OK
    可后来的TQ执行错误呢,这样资料也不对
    还是自己写一些SQL语句进行数据的批移动吧,这样控制得更灵活些。
    //这位老兄的方法是最可靠的,我一开始时就想到
    我现在就是不想用这种方法,想在原来 的思路 上作少量的修改
    如果实在没办法 ,估计肯定 用此法
      

  5.   

    三个操作是一个整体 ,只有全部成功才可以写入库 . 用临时表 ? 效率肯定奇差Study
      

  6.   

    用两个不同的Session
    未测试
      

  7.   

    用两个不同的Session
    //我沒測試,不過估計不可行;因為事務的處理肯定不正確用存储过程
    //是個可行的方法,這個與數據庫有很大關係,有的數據庫是不支持的不過還是很感謝大家的參與!
      

  8.   

    建议你不要如此固执己见,我们应该是找到合适的解决方法;
    其他的delphi的问题,多了,变通实现吧!