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是如何处理的?如果我保证每台客户机每次只能提交一个事务以及不同的客户机提交的事务名称不同,情况又将如何呢?请各位高手加以指点!谢谢!
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是如何处理的?如果我保证每台客户机每次只能提交一个事务以及不同的客户机提交的事务名称不同,情况又将如何呢?请各位高手加以指点!谢谢!