有关Sql Server7.0事务处理的一个问题(200分)

  • 主题发起人 主题发起人 guanyanan
  • 开始时间 开始时间
G

guanyanan

Unregistered / Unconfirmed
GUEST, unregistred user!
我在用Delphi5.0/Sql Server7.0进行C/S开发时发现用Delphi5.0提供的
TDatabase控件提供的方法StartTransaction,Commit,Rollback进行事务处理时(ReadCommited孤立级别),不知为什么,发现当出现EDBEngineError类异常错误时有时事务不能滚回操作(有时也能).因而我用以下三个过程代替了上面的三个方法:
Unit MyFunctions
Interface
...
Procedure MystartTransaction;
Procedure MyCommit;
Procedure MyRollback;
var Query1:TQuery;
Implementation
Procedure MystartTransaction;
begin
try
Query1:=TQuery.Create(nil);
Query1.Databasename:=SomeDatabase;
with Query1 do begin
close;
sql.Text:='begin tran MyTransaction';
execsql;
close;
end;
finally
Query1.close;
Query1.free;
end;
end;
Procedure MyCommit;
begin
try
Query1:=TQuery.Create(nil);
Query1.Databasename:=SomeDatabase;
with Query1 do begin
close;
sql.Text:='Commit tran MyTransaction';
execsql;
close;
end;
finally
Query1.close;
Query1.free;
end;
end;

Procedure MyRollback;
begin
try
try
Query1:=TQuery.Create(nil);
Query1.Databasename:=SomeDatabase;
with Query1 do begin
close;
sql.Text:='Rollback tran MyTransaction';
execsql;
close;
end;
finally
Query1.close;
Query1.free;
end;
except
end;
end;

end.
我在单一客户机/服务器上测试通过.
但我不知道当Sql Server7.0进行多客户服务多事务处理时我的这种替代会不会失败?Delphi5.0的TDatabase是如何处理的?如果我保证每台客户机每次只能提交一个事务以及不同的客户机提交的事务名称不同,情况又将如何呢?请各位高手加以指点!谢谢!
 
我的E_Mail:guanyanan@263.net
 
>>发现当出现EDBEngineError类异常错误时有时事务不能滚回操作(有时也能)

我提前也"碰到"过类似问题,但后来的检查发现还是程序的问题,即把不能用于
transaction内部的SQL语句放到了事务内部,在这类问题解决之后,还没发现
tdatabase的transcation有问题,希望你也检查一下.
 
接受答案了.
 
請教一下,那些語句不能回滾?
 
后退
顶部