如何实现原子操作?

mnlisa 2004-07-19 10:36:05
对下面这样的循环结构,如何实现原子操作。

for i=0 to 11 do
begin

with query1 do
begin
通过循环对多个table进行的写入操作
end;
with query2 do
begin
通过循环对多个table进行的写入操作
end;
end;


当query1中的有一次异常情况发生或者query2有异常发生,那么就把此次循环中的对数据库的操作全部回滚,也就是相当是原子操作,要么全做,要么不做。

在delphi中如何实现呢??
...全文
243 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
mnlisa 2004-07-31
  • 打赏
  • 举报
回复
我也同意:aiirii(ari-爱的眼睛)

不过那是BDE的方法。

前几天有事情,现在结贴
exu 2004-07-20
  • 打赏
  • 举报
回复
Adoconnection
如下
Conn1:TADOConnection;
....
Conn1.BeginTrans;
try

//你的代码

except
Conn1.RollBackTrans;
else
Conn1.CommitTrans;
end;
haiying604 2004-07-20
  • 打赏
  • 举报
回复
难道ADOConnection1有相到于DAtaBase中的某些功能?

如:BeginTrans,.CommitTrans,.RollbackTrans
待会try一下,
:)

(一下不能联系回复三次以上,只能用另外一个帐号了,)
mnlisa 2004-07-20
  • 打赏
  • 举报
回复
ADOStoredProc1 是不是相当于BDE中的DataBase呢?
把ADOStoredProc1中的connection指向我的ADOConnection1就可以直接用的?

很少用DAtaBase,请aiirii(ari-爱的眼睛)指教一下,谢谢
mnlisa 2004-07-20
  • 打赏
  • 举报
回复
aiirii(ari-爱的眼睛):

对哦,Database有这个功能,但是这个是BDE的,我用的是ADO

zhxfzhxf1 2004-07-20
  • 打赏
  • 举报
回复
同意
aiirii(ari-爱的眼睛)
XXSingle 2004-07-20
  • 打赏
  • 举报
回复
承认UpdateBatch(arall)没得自已加事务控制的稳定

从速度来看并不亚于aiirii所说的方法
XXSingle 2004-07-20
  • 打赏
  • 举报
回复
1、打开缓存功能:LockType=ltBatchOptimistic

2、用UpdateBatch(arall)一次性提交,效率还可以
pdbird 2004-07-20
  • 打赏
  • 举报
回复
反对:2、用UpdateBatch(arall)一次性提交,效率还可以
aiirii(ari-爱的眼睛) 讲得不错!
mnlisa 2004-07-19
  • 打赏
  • 举报
回复
好,我想想,可能这个方法能星

但是有些操作就是隐含了post操作的阿。
比如那些first,next操作。

还有哪些操作中也隐含了用post操作呢?
谢谢

aiirii 2004-07-19
  • 打赏
  • 举报
回复
要用到 Database

大概如下:

Database1.StartTransaction;
try
for i=0 to 11 do
begin

with query1 do
begin
通过循环对多个table进行的写入操作
end;
with query2 do
begin
通过循环对多个table进行的写入操作
end;
end;
except
Database1.Rollback;
exit;
end;
Database1.Commit;
dh9450 2004-07-19
  • 打赏
  • 举报
回复
缓存更新
用try
finally
end
包起来
没有异常再POST

2,498

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧