Firebiard2.5+Delphi+IBObjects - invalid transaction handle (expecting explicit transaction start)
Есть простенький проект на Delphi7 с компонентами IBO - IB_Connection
и IB_DSQL
. Если IB_DSQL
использовать без IB_Transaction
, то всё отрабатывает идеально. Но так делать автор IBO не рекомендует.
А как только я прописываю в свойстве IB_DSQL.IB_Transaction
ссылку на компонент IB_Transaction
, мой IB_DSQL
падает сразу на Prepare
по экзцепшну: "invalid transaction handle (expecting explicit transaction start)", даже если я перед Prepare
делаю Transaction.StartTransaction
{?}. Хотя Transaction.InTransaction
показывает true
.
Вот фрагмент кода. Строка, на которой падает, помечена {!}.
with dsqlSaveNewOrder do begin
IB_Transaction.StartTransaction; {?}
if not Prepared then
Prepare; {!}
ParamByName('aRef_Id').AsInteger :=ARefId;
ParamByName('aName').AsString := AName;
ExecSQL;
if FieldByName('err').AsInteger <> 0 then begin
IB_Transaction.Rollback;
Result := -1971;
WLog('ERROR: '+FieldByName('msg').AsString);
end
else begin
IB_Transaction.Commit;
Result := FieldByName('oId').AsInteger;
WLog('Order #'+IntToStr(ARefId)+' "'+AName+'" saved in local storage');
end;
end;
Вот SQL, который прописан в IB_DSQL.SQL:
execute procedure saveNewOrder(:aRef_Id,:aName)
Или такой SQL, но с аналогичным результатом:
select oId,err,msg
from saveNewOrder(:aRef_Id,:aName)
Свойства всех компонентов выставлены по умолчанию.