![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() У меня ошибка возникает: недостаточно информации о ключевом столбце для обновления, после того как я делаю refresh датасету, в который недавно добавил запись.
В реалиях: пользователь заполняет счет, и вдруг понимает, что контрагента в базе еще нет: добавляет его, а в lookupcombobox'e выбора контрагента его не появляется. Транзакция все это время открыта. Как бороть недуг? |
#2
|
|||
|
|||
![]() DataSet который связан с lookup компонентом должен быть в одной транзакции с изменяемым набором данных.
После внесения изменений, lookup набор данных нужно обновить. PS Трогать уровень изоляции транзакций не рекомендую. Последний раз редактировалось kaakaa, 23.09.2014 в 22:44. |
#3
|
||||
|
||||
![]() Цитата:
Код:
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+пробел ввёл ![]() |
#4
|
|||
|
|||
![]() >>вместо Refresh получил Requery и всё заработало.
Дело в том, что Refresh обновляет только одну текущую запись набора данных, а Requery выполняет запрос заново. Причина ошибки: Неполное понимание работы методов Refresh и Requery . Решение: В данном случае методом тыка. PS Освежите в памяти методы компонентов ADO. |
Этот пользователь сказал Спасибо за это полезное сообщение: | ||
Uniq! (24.09.2014)
|