![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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+пробел ввёл ) вместо Refresh получил Requery и всё заработало. |
|
#4
|
|||
|
|||
|
>>вместо Refresh получил Requery и всё заработало.
Дело в том, что Refresh обновляет только одну текущую запись набора данных, а Requery выполняет запрос заново. Причина ошибки: Неполное понимание работы методов Refresh и Requery . Решение: В данном случае методом тыка. PS Освежите в памяти методы компонентов ADO. |
| Этот пользователь сказал Спасибо за это полезное сообщение: | ||
Uniq! (24.09.2014)
| ||