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不开启它的事务呢?
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不开启它的事务呢?
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;
database1.Commit
其实也很简单;因为一个功能 操作,可能要关联好多表,if Database1.inTransactioned then
database1.Commit
//能解决问题吗
//只是没有出现我说的BUG,但是会有更大BUG
//因为也许开始时的两张资料表,BatchMove OK
可后来的TQ执行错误呢,这样资料也不对
还是自己写一些SQL语句进行数据的批移动吧,这样控制得更灵活些。
//这位老兄的方法是最可靠的,我一开始时就想到
我现在就是不想用这种方法,想在原来 的思路 上作少量的修改
如果实在没办法 ,估计肯定 用此法
未测试
//我沒測試,不過估計不可行;因為事務的處理肯定不正確用存储过程
//是個可行的方法,這個與數據庫有很大關係,有的數據庫是不支持的不過還是很感謝大家的參與!
其他的delphi的问题,多了,变通实现吧!