Нужно обновить только ОДНУ строку из набора данных. На Королевстве Делфи нашел подборку статей, но, честно, так и не понял, все равно обновляется весь набор данных.
Определил обработчик после открытия НД
procedure Tdm.tMdocAfterOpen(DataSet: TDataSet);
begin
with (dataSet as TADODataSet) do
begin
Properties['Update Resync'].Value:=adResyncAutoIncrement+adResyncUpdates; Properties['Unique Table'].Value := 'rm_mdoc';
Properties['Update Criteria'].Value:=adCriteriaKey;
Properties['Resync Command'].Value := 'select m.mdoc_id, m.mdoc_date, m.mdoc_note,'+
'm.ag_id, m.mng_id, m.mdoc_guid,'+
'(select sum(doc_sum)from rm_doc where mdoc_id=M.mdoc_id) as mdoc_sum,'+
'(select sum(doc_vatsum)from rm_doc where mdoc_id=M.mdoc_id) as mdoc_vatsum,'+
'(select sum(doc_sumnnr)from rm_doc where mdoc_id=M.mdoc_id) as mdoc_nnrsum,'+
'mdoc_status, mdoc_num from rm_mdoc M where m.mdoc_id = ?';
end;
end;
Я так понимаю, фишка в Update Resync, но что конкретно указать? Какие значения/комбинация значений из?
adResyncNone Никаких обновлений данных на стороне клиента после добавления или изменения не производится
adResyncAutoIncrement После добавления новых строк считывается значение автоинкрементного поля (новое Identity) Это значение Update Resync принято по умолчанию
adResyncUpdates После изменения строки - измененная строка тут же считывается с сервера
adResyncInserts После добавления строки новая строка сразу же считывается с сервера
adResyncConflicts В случае ошибки, связанной с конфликтом при конкурирующим обновлении с сервера считывается значение строки, вызвавшей конфликт
adResyncAll Комбинация из всех возможных значений свойства Update Resync