起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 142|回复: 6

【结帖】请教关于Query的事务控制

[复制链接]
发表于 2008-6-19 11:47:47 | 显示全部楼层 |阅读模式
版本:3012
两个query用的时同一个connection,连接不同表,事务该如何控制??
with query1 do
begin
   while not eof  do
   begin
       edit;
       filedbyName('nam').asstring := '333'
       post;
       next;
   end;
end;
with query2do
begin
   while not eof  do
   begin
       edit;
       filedbyName('rem_txt').asstring := '333'
       post;
       next;
   end;
end;

with query1.Connection.Transaction do
begin
    TransactionHandle := Start(false);
    try
       query1.applyupdates; // 事实证明在这已经把数据提交了
       query2.applyupdates;// 事实证明在这已经把数据提交了
       Commit(lTransactionHandle); // 如果这里提交不成功,数据并没有发生回滚
    except
       Rollback(lTransactionHandle); // 对query没起作用。。。
    end;
end;
回复

使用道具 举报

发表于 2008-6-19 14:09:18 | 显示全部楼层
1、"// 对query没起作用。。。":是说两个query都没有更新到数据库吗?
2、检查一下代码“TransactionHandle ”,“lTransactionHandle”
TransactionHandle := Start(false);
Commit(lTransactionHandle);
Rollback(lTransactionHandle);
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-6-19 15:00:00 | 显示全部楼层
两个query在COMMIT前已经把数据提交了,也就是说事务对query没起作用
回复 支持 反对

使用道具 举报

发表于 2008-6-19 16:23:32 | 显示全部楼层
2、检查一下代码“TransactionHandle ”,“lTransactionHandle”
TransactionHandle := Start(false);
Commit(lTransactionHandle);
Rollback(lTransactionHandle);

你在提交和回滚时,使用的似乎不是启动事务时记录的事务句柄。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-6-19 16:30:48 | 显示全部楼层
改变方式解决了。。。谢谢啊,至于是否是事务句柄的问题留待以后再查。。。
回复 支持 反对

使用道具 举报

发表于 2008-6-19 16:39:40 | 显示全部楼层
哦,能共享一下吗?
谢谢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-6-19 16:52:48 | 显示全部楼层
把所有更新语句 用INSERT,UPDATE,DELETE实现
begin
  insert.....;
  update ....;
  delete....;
end;

然后用一个query 执行这个语句,就像执行存储过程一样。。。呵呵
帮我看下http://bbs.justep.com/forum.php? ... 是否支持啊?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-19 23:26 , Processed in 0.037118 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表