Игрался и доигрался
Потом всё вернул всад. Но проблема иногда проявляется. Вот и не могу найти закономерность.
Вообще, хочу сделать, как на фибах: одна транзакция читающая и постоянно открытая, а вторая - пишущая и максимально короткая, т.е. только на время записи.
procedure TObjectsSearch.InitDB;
begin
connNotify := TUniConnection.Create(nil);
InterBaseUniProvider1 := TInterBaseUniProvider.Create(connNotify);
connNotify.ProviderName := 'InterBase';
connNotify.ConnectString := fConnectionString;
connNotify.AutoCommit := True;
transW := TUniTransaction.Create(nil);
transW.IsolationLevel := ilCustom;
transW.DefaultCloseAction := taRollback;
transW.DefaultConnection := connNotify;
transW.SpecificOptions.Values['Params'] := 'write;nowait;rec_version;read_committed';
transR := TUniTransaction.Create(nil);
transR.IsolationLevel := ilCustom;
transR.DefaultCloseAction := taRollback;
transR.DefaultConnection := connNotify;
transR.SpecificOptions.Values['Params'] := 'read;nowait;rec_version;read_committed';
connNotify.DefaultTransaction := transR;
connNotify.Connect;
qQueryValue := TUniQuery.Create(connNotify);
qQueryValue.Connection := connNotify;
qQueryValue.Transaction := transR;
qQueryValue.UpdateTransaction := transW;
может я неправильно создаю и уничтожаю элементы?
destructor TObjectsSearch.Destroy;
begin
if Assigned(connNotify) then
begin
if connNotify.Connected then
connNotify.Disconnect;
connNotify.DisposeOf;
end;
if Assigned(transW) then
transW.DisposeOf;
if Assigned(transR) then
transR.DisposeOf;
Не в том порядке?
Может нужно принудительно закрывать транзакции? Хотя у компоненты есть же свойство DefaultCloseAction: