Y
yeszhang
Unregistered / Unconfirmed
GUEST, unregistred user!
Delphi 2010 开发的DBX多层系统。 我写了一个处理多个SQL的事务处理函数:function TDBFun.DoSqlInTransaction(sQLList: TStringList): string;var DT: TDBXTransaction; sResult: string; blUseLabel: Boolean; i: Integer;label ErrorTrans;begin blUseLabel := True; Result := ''; if dsAyjSrvMdu.conConAyj.InTransaction then begin Result := '当前正在处理事务.请重新执行.'; Exit; end; dbfSlton.AddLogInfo('●进入执行事务,执行的所有SQL为●', sQLList.Text, '', 0, 0, False); with dsAyjSrvMdu.conConAyj do begin try DT := BeginTransaction(TDBXIsolations.ReadCommitted); try try for i := 0 to sQLList.Count - 1 do begin if Trim(sQLList) <> '' then begin sResult := execSql('事物执行,执行当前SQL:' + IntToStr(i), sQLList); end; if sResult <> 'OK' then goto ErrorTrans; end; CommitFreeAndNil(DT); dbfSlton.AddLogInfo('●事务完成CommitFreeAndNil●', '●事务完成●确认事务并返回:' + sResult, '', 0, 0, False); Result := 'OK'; blUseLabel := False; ErrorTrans : // 定义错误开始,Label if blUseLabel then begin RollbackFreeAndNil(DT); Result := '异常,事务回滚并RollbackFreeAndNil【异常E】' + #13#13 + sResult; end; except on e: exception do RollbackFreeAndNil(DT); end; finally RollbackIncompleteFreeAndNil(DT); end; except on e: exception do Result := '异常:' + e.Message; end; end;end;应该事务处理完成后,都被释放了啊?可是这个服务器端的函数大概执行50次左右,就进入不了事务了,截获的错误信息是: 由于超出容量限制,不能创建新事务。 每次出现这个问题后,我只要重新启动我的服务端应用程序,就OK了。肯定不是SQL 服务器的问题,但是我又看不出这个函数的事物难道没释放?了一下其实都执行了释放过程: 我加了几个日志,跟踪后是这样的: 97:[●进入执行事务●][2009-11-12 11:17:32] delete from PlanFormhead where PlanId='JH09110782' //事务执行的第一条SQL delete from PlanFormST where PlanId='JH09110782' //事务执行的第二条SQL update T_JRArrayInfo set F_Status='未处理',F_AyjPlanID='' where F_AyjPlanID='JH09110782' //事务执行的第三条SQL 101:[●事务完成CommitFreeAndNil●][2009-11-12 11:17:32] ●事务完成●确认事务并返回:OK 102:[●事务完成RollbackIncompleteFreeAndNil●][2009-11-12 11:17:32] 都是放了啊??是什么原因导致的呢?google搜了基本都没碰到这个问题,请高手支招。