COM+的事务问题,分数不够再加哦!!!!!高手去哪了????
我做了一个COM+的组件,主要用于产生一个标识的下一个ID的,组件中使用事务的代码如下:
function TIdenGen.GetNextID(const str_IdenName: WideString): Integer;
var
TransactionContextEx: ITransactionContextEx;
IdenGetObj: IIdenGet;
IdenSetObj: IIdenSet;
IdenAddObj: IIdenAdd;
CurrentID: Integer;
begin
TransactionContextEx := CreateTransactionContextEx;
try
OleCheck(TransactionContextEx.CreateInstance(CLASS_IdenGet, IID_IIdenGet, IdenGetObj));
CurrentID := IdenGetObj.GetIDByName(str_IdenName);
if CurrentID = -1 then
begin
OleCheck(TransactionContextEx.CreateInstance(CLASS_IdenAdd, IID_IIdenAdd, IdenAddObj));
IdenAddObj.AddIDByName(str_IdenName);
Result := 0;
end else
begin
Inc(CurrentID);
OleCheck(TransactionContextEx.CreateInstance(CLASS_IdenSet, IID_IIdenSet, IdenSetObj));
IdenSetObj.SetIDByName(str_IdenName, CurrentID);
Result := CurrentID;
end;
TransactionContextEx.Commit;
except
TransactionContextEx.Abort;
raise;
end;
end;
但是,我使用下面程序调用:
procedure TForm1.Button2Click(Sender: TObject);
var
obj: Variant;
begin
obj := CreateOleObject('iden.idengen');
Log.Lines.Add(IntToStr(obj.GetNextID('test')));
obj := Unassigned;
end;
第一次可以通过,但是第二次再点击BUTTON2时,出现错误:
“分布式事务已经完成,请将此会话登记到新事务或NULL事务中”
我不知道这是怎么回事,请帮我看看哦,高手们。
我头都大了!!!!!!!!!