У меня есть TADODataset
, выполненный с (только для примера):
SELECT id, name, lastname, name + ' ' + lastname as fullname
FROM persons
ORDER BY lastname
После открытия набора данных я могу изменить поля "name"
и "lastname"
, но не могу изменить "fullname"
, потому что он вычисляется.
Я пытаюсь открыть TADODataset
в TClientDataset
через DataProvider
, но это занимает слишком много времени (в исходном наборе данных около 100 тысяч записей):
SrcDS.FieldDefs.Update;
for i := 0 to Pred(SrcDS.FieldDefs.Count) do
SrcDS.FieldDefs[i].CreateField(SrcDS).ReadOnly := false;
DestDS := TClientDataset.Create(nil);
DestDS.SetProvider(SrcDS);
DestDS.Open;
DestDS.SetProvider(nil);
В общем, я хочу иметь независимый набор данных с изменяемыми полями.
Как мне изменить вычисляемые поля в наборе данных?
LockType = ltBatchOptimistic
вы могли редактировать вычисляемое поле, но я не нашел способа запретить провайдеру не обновлять изменения, внесенные в поле вычислений во времяUpdateBatch
. - person kobik   schedule 15.03.2013ApplyUpdates
. Таким образом, провайдер увидит, что ему не нужно ничего менять. Другим вариантом может быть использование обработчика событийonBeforeUpdateRecord
компонента DataSetProvider для написания собственного SQL. См. это Создание приложений с помощью ClientDataSet и InterBase Express, подзаголовок Обновление наборов данных, которые нельзя обновить. - person EMBarbosa   schedule 06.11.2013