池化com+组件在异常抛出后不能rollback数据库操作的问题?我和ytwxw (wxw) 讨论未果,再次发贴
Translation DataModule接口中提供这样一个方法供客户端调用:
procedure Tmtsdm1.InsertTest;
var
SqlStr: string;
begin
SqlStr := 'INSERT INTO Unit(Unit) VALUES (' + #39 + '个' + #39 + ')';
try
acPHYMIS.Execute(SqlStr);
raise Exception.Create('Error occured');
SetComplete;
except
SetAbort;
raise;
end;
end;
意在测试com+的事务处理能否正确执行。
将组件安装后,在组件服务中该com+组件的属性设置中将“激活”页的“启用对象池”选项选中,执行客户端程序调用上面这个方法,发现com+的事务机制不能正确执行,数据会写入数据库中。如果不选中“启用对象池”,则一切正常,数据并不会写到数据库中。
说明:Translation DataModule的设置,事务属性:requires a transaction,允许object pooling,pooled设为true,无论将AutoComplete设为True或False都会出现上述情况。
该问题最先由ytwxw (wxw) 提出,至今尚未有结论,我也发现类似问题。我俩探讨后无法解决,特在此再开一贴。请各路com+高手帮忙解答!