2014-09-05 6 views
3

Как я могу получить от TClientDataset изменений?Как я могу получить изменения TClientDataset в другой TClientDataset?

У меня есть TClientDataset по имени GetDataset, и у меня есть сетка. Я хочу изменения в новом TClientDataset с именем ChangeDataset.

Как я могу это сделать?

+0

Вы хотите, чтобы ChangeDataset содержал * только * записи в вашем первом ClientDataSet, которые были изменены, или все из них? – MartynA

+1

только изменен – Tarasov

ответ

10

Если у вас есть источник ClientDataSet CDS1, вы должны быть в состоянии скопировать измененные записи на второй ClientDataSet CDS2 делая

if CDS1.ChangeCount > 0 then 
    CDS2.Data := CDS1.Delta; 

Как вы увидите, если вы попытаетесь это сделать, это дает вам " перед записью и записью с изменениями. Возможно, это не обязательно то, что вы хотите - честно говоря, вы бы лучше всего прочитали статью Whipple, опубликованную в комментарии и в OLH, чтобы получить точный результат, которого вы, возможно, захотите достичь. Дело в том, что вся необходимая информация находится в исходном CDS, пока вы не очистите его (вызвав ApplyUpdates() - после этого, если это произойдет, журнал изменений пуст).

Если вы посмотрите на строки в CDS2, не сразу видно, как вы определяете, содержит ли определенное поле измененное значение, и как вы отличаете тот, который делает только тот, который только пуст. У Истра была очень хорошая публикация довольно давно в одной из групп новостей Borland NTTP их Марк Эдингтон, я думаю, объясняя, как это сделать. В основном, это вопрос оценки VarIsClear на имущество NEWVALUE месторождения:

if VarIsClear(CDS2.Fields[i].NewValue) then 
// means Fields[i] does not have a changed value 

Кстати, так как вы можете сохранить состояние CDS в XML, вы можете использовать XML манипуляции, например, с парсером DOM, такой как встроенный Windows (см. MSXML.Pas), чтобы легко сделать много вещей, которые могут возникнуть с использованием парадигмы TDataSet.

+2

Статья от Эрика Уиппла http://conferences.embarcadero.com/article/32227#AuditTrail –

+0

@SirRufo: Большое спасибо за ссылку, очень полезно. – MartynA