Можно узнать какие записи изменились/добавились в датасет?
От: непонимайу  
Дата: 14.08.07 10:28
Оценка:
Надо пробежать по записям и узнать их состояние.

with dxMemData1 do
    begin
      First;
      while not eof do
        begin
          if "Modified" then
            // изменена/добавлена
          else
           // не изменена
          Next;
        end;
    end

Есть cвойства типа "UpdatesPending"/"Modified" для этого случая? Говорят, что либо добавлять поле, либо перекрываеть метод UpdateStatus: TUpdateStatus. Есть другие варианты? Если нет, то стоит ли свое городить или у DevExpress есть это в планах?
Re: Можно узнать какие записи изменились/добавились в датасе
От: silentroach Россия  
Дата: 14.08.07 17:21
Оценка:
Здравствуйте, непонимайу, Вы писали:

В моем DevExpress'е таких штук нет
а UpdateStatus — это, насколько я понял, состояние датасета, а не записи. Гляньте на TClientDataSet.

Н>Надо пробежать по записям и узнать их состояние.


Н>
Н>with dxMemData1 do
Н>    begin
Н>      First;
Н>      while not eof do
Н>        begin
Н>          if "Modified" then
Н>            // изменена/добавлена
Н>          else
Н>           // не изменена
Н>          Next;
Н>        end;
Н>    end
Н>

Н>Есть cвойства типа "UpdatesPending"/"Modified" для этого случая? Говорят, что либо добавлять поле, либо перекрываеть метод UpdateStatus: TUpdateStatus. Есть другие варианты? Если нет, то стоит ли свое городить или у DevExpress есть это в планах?
Re[2]: Можно узнать какие записи изменились/добавились в дат
От: Аноним  
Дата: 15.08.07 10:29
Оценка: +1
Здравствуйте, silentroach, Вы писали:

S>Здравствуйте, непонимайу, Вы писали:


S>В моем DevExpress'е таких штук нет

S>а UpdateStatus — это, насколько я понял, состояние датасета, а не записи. Гляньте на TClientDataSet.

Не пробовал с другими датасетами, но у TClientDataset
свойство UpdateStatus это как раз статус текущей записи.
Есть еще свойство StatusFilter с помощью которого, можно "высветить" еще и удаленные записи.
И все это работает до тех пор, пока у TClientDataset не вызван ApplyUpdates.
После ApplyUpdates информация об изменениях теряется, т.е. удаленные записи реально удаляются,
измененые — реально модифицируются, вставленные — реально вставляются и UpdateStatus всех записей
становится равным usUnmodified.

Так что

  with dxMemData1 do
  begin
    First;
    while not eof do
    begin
      if UpdateStatus in [usInserted, usModified] then
      begin
      // изменена/добавлена
      end
      else
      if UpdateStatus = usUnModified] then
      begin
      // не изменена
      end;
      Next;
    end;
  end


должно помочь.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.