现在我有两个表.它们保存时要在一个事务中...
try
conn.BeginTrans();
adot1.UpdateBatch();
adot2.UpdateBatch();
conn.CommitTrans;
except
on e:Exception do begin
conn.RollbackTrans;
end;
end;
在两个表能保存时代码能正常运行.但是如果t2保存时遇到约束错的时候.回滚事务.然后由用户再改动t2.再保存时.就出错了.经发现是因为第二次保存时,t1的UpDateBatch已经失效.最后发现到因为t1每个记录的RecordStatus都设为rsUnmodified.但这个RecordStatus是只读的.我不能把它改为原值.头痛中....
try
conn.BeginTrans();
adot1.UpdateBatch();
adot2.UpdateBatch();
conn.CommitTrans;
except
on e:Exception do begin
conn.RollbackTrans;
end;
end;
在两个表能保存时代码能正常运行.但是如果t2保存时遇到约束错的时候.回滚事务.然后由用户再改动t2.再保存时.就出错了.经发现是因为第二次保存时,t1的UpDateBatch已经失效.最后发现到因为t1每个记录的RecordStatus都设为rsUnmodified.但这个RecordStatus是只读的.我不能把它改为原值.头痛中....
adot1.updatebatch();前面加adot1.edit;不知道能不能解决问题?
try
conn.BeginTrans();
adot1.UpdateBatch(); // 改为adot1.Recordset.UpdateBatch($00000003);
adot2.UpdateBatch(); conn.CommitTrans;
adot1.Refresh(); //新添的一句
except
on e:Exception do begin
conn.RollbackTrans;
end;
end; 把代码作如上改动.这样t1批更新后.记录提交到数据库,但标记是不会改变的.等t2也提交成功后,通过refresh来把t1的标记全部更新.如果t2提交发生异常时,就会回滚事务..
之后用户再按"取消"按钮时,执行
adot1.CancelBatch();
adot2.CancelBatch();这样t1和t2也可以正常取消了!!!!!
conn.BeginTrans();
adot1.UpdateBatch(); // 改为adot1.Recordset.UpdateBatch($00000003);
adot2.UpdateBatch(); conn.CommitTrans;
adot1.Refresh(); //新添的一句
except
on e:Exception do begin
conn.RollbackTrans;
adot1.CancelBatch();
adot2.CancelBatch();
end;
end;是否就可以不用等待用户响应了?