Показать сообщение отдельно
  #3  
Старый 24.09.2014, 10:28
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

Цитата:
Сообщение от kaakaa
DataSet который связан с lookup компонентом должен быть в одной транзакции с изменяемым набором данных.
После внесения изменений, lookup набор данных нужно обновить.

PS
Трогать уровень изоляции транзакций не рекомендую.
Функция вызова модальной формы и открытия транзацкии у меня реализована вот так (и видимо здесь нарушение):

Код:
procedure TFormMain.dxBarButton4Click(Sender: TObject);
begin
  BillsView.BeginUpdate;
  with TFormBillAdd.Create(Application) do
    try
      Connection.BeginTrans;
      if BillAddShow(ActiveUserID, Connection) then
      begin
        Connection.CommitTrans;
        aBills.Requery;
      end
      else
        Connection.RollbackTrans;
    finally
      Free;
    end;
  BillsView.EndUpdate;
end;

Сначала создаётся форма, потом открывается транзакция, но прикрепление ДатаСета к Connection (TADOCOnnection) идёт после открытия в методе BillAddShow

Код:
function TFormBillAdd.BillAddShow(aUser: Integer;
  iConnection: TADOConnection): Boolean;
begin
  // ...
  aEntities.Connection := iConnection;
  // ...
  Result := ShowModal = mrOK;
end;

В целом не обращал внимания на это до появления вышеописанной ошибки, т.к. даже если изменить aEntities, и после откатить транзацкию, то и изменения в aEntities тоже откатываются.

Вообще вопрос решился вчера совершенно случайно (не ту функцию по ctrl+пробел ввёл ) вместо Refresh получил Requery и всё заработало.
Ответить с цитированием