我使用D2007(UP2)+dbExpress+MSSQL开发MIS系统,是使用事务的时候程序经常会报错:不能创建新事务。
比如主从表的保存,代码如下:
function TTemp_Bill.SaveData:Boolean;
begin
Result:=False; if MCDS.Active and DCDS.Active then begin
Saving:=True;
try
with MCDS do begin
if (State=dsInsert) or (State=dsEdit) then
Post;
end;
with DCDS do begin
if (State=dsInsert) or (State=dsEdit) then
Post;
end; BeginTran;
if MCDS.ApplyUpdates(0)+DCDS.ApplyUpdates(0)>0 then begin
RollbackTran;
ShowMsg(PChar(UpdateFailStr),'保存失败',MB_ICONERROR);
end
else begin
CommitTran;
// MCDS.Refresh;
// DCDS.Refresh;
Result:=True;
end;
finally
Saving:=False;
end;
end;
end;是经常报错,并不是每次都报错。还有其他方面的错误,不过都已经解决了,就这个问题捆饶我很久了,望高手指点迷津。
比如主从表的保存,代码如下:
function TTemp_Bill.SaveData:Boolean;
begin
Result:=False; if MCDS.Active and DCDS.Active then begin
Saving:=True;
try
with MCDS do begin
if (State=dsInsert) or (State=dsEdit) then
Post;
end;
with DCDS do begin
if (State=dsInsert) or (State=dsEdit) then
Post;
end; BeginTran;
if MCDS.ApplyUpdates(0)+DCDS.ApplyUpdates(0)>0 then begin
RollbackTran;
ShowMsg(PChar(UpdateFailStr),'保存失败',MB_ICONERROR);
end
else begin
CommitTran;
// MCDS.Refresh;
// DCDS.Refresh;
Result:=True;
end;
finally
Saving:=False;
end;
end;
end;是经常报错,并不是每次都报错。还有其他方面的错误,不过都已经解决了,就这个问题捆饶我很久了,望高手指点迷津。
以下是事务控制的3个过程:
var
Tran:TDBXTransaction;//------------------------------------------------------------------------------procedure BeginTran;
begin
if SysCon.InTransaction then
RollbackTran;
Tran:=SysCon.BeginTransaction;
end;//------------------------------------------------------------------------------procedure CommitTran;
begin
if Assigned(Tran) then
SysCon.CommitFreeAndNil(Tran);
end;//------------------------------------------------------------------------------procedure RollbackTran;
begin
if Assigned(Tran) then
SysCon.RollbackFreeAndNil(Tran);
end;
我试过使用StartTransaction也是有那样的现象。
不知他有没有真正用dbExpress做个项目。
dbExpress不熟悉,帮不了你。