Как определить наличие изменений в BatchUpdate таблице?
От: Mazay Россия  
Дата: 04.05.05 10:38
Оценка:
Есть TADOTable, которую пользователль редактирует в окошке. Хочется чтоп при закрытии окошко спрашивало "Сохранить изменения?", естессно если есть несохранённые изменения. В том числе и удалённые записи. Вот этот момент меня очень нервирует. Сейчас "работает" "временное решение" основанное на пробегании всей таблицы и проверки UpdateStatus'а текущей записи:

function WasChanged(t:TADOTable):boolean;
begin
  result:=false;
  t.First;
  while not(t.Eof) do begin
    if t.UpdateStatus<>usUnmodified
      then begin result:=true; break; end;
    t.Next;
  end;
end;


Мало того что этот код травмирует психику , так он ещё и не улавливает наличие удалённых записей. Чего и следует ожидать, т.к. Next проскакивает удалённые записи. Возникает вопрос: как это сделать по-человечески?
Главное гармония ...
Re: Как определить наличие изменений в BatchUpdate таблице?
От: Oleg A. Bachin Украина  
Дата: 04.05.05 12:07
Оценка:
Здравствуйте, Mazay, Вы писали:

M>Есть TADOTable, которую пользователль редактирует в окошке. Хочется чтоп при закрытии окошко спрашивало "Сохранить изменения?", естессно если есть несохранённые изменения. В том числе и удалённые записи. Вот этот момент меня очень нервирует. Сейчас "работает" "временное решение" основанное на пробегании всей таблицы и проверки UpdateStatus'а текущей записи:


M>
M>function WasChanged(t:TADOTable):boolean;
M>begin
M>  result:=false;
M>  t.First;
M>  while not(t.Eof) do begin
M>    if t.UpdateStatus<>usUnmodified
M>      then begin result:=true; break; end;
M>    t.Next;
M>  end;
M>end;
M>


M>Мало того что этот код травмирует психику , так он ещё и не улавливает наличие удалённых записей. Чего и следует ожидать, т.к. Next проскакивает удалённые записи. Возникает вопрос: как это сделать по-человечески?


в свое время так и делал... мало кто реализует кэш изменений и темболее их историей.
немного офтопа-рекламы: мой знакомый такое делал для компонент под информикс, по-моему IDAC называется, вроде собирался на том же движке под ODBC написать, мож еще под что. там бы можно было пробежаться по измененным записям. но поскольку я давно предпочитаю использовать слой бизнес-логики, мне сейчас это не актуально (у меня просто нет понятия таблица).
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Best regards,
Oleg A. Bachin
Re[2]: Как определить наличие изменений в BatchUpdate таблиц
От: kavlad Россия http://www.wavesoft.ru
Дата: 05.05.05 05:50
Оценка:
Здравствуйте, Oleg A. Bachin, Вы писали:

OAB>в свое время так и делал... мало кто реализует кэш изменений и темболее их историей.

OAB>немного офтопа-рекламы: мой знакомый такое делал для компонент под информикс, по-моему IDAC называется, вроде собирался на том же движке под ODBC написать, мож еще под что. там бы можно было пробежаться по измененным записям. но поскольку я давно предпочитаю использовать слой бизнес-логики, мне сейчас это не актуально (у меня просто нет понятия таблица).

Хе-хе...

Можно тривиально использовать TClientDataSet или любой memory dataset.
... << RSDN@Home 1.1.4 beta 4 rev. 302>>
Re: Как определить наличие изменений в BatchUpdate таблице?
От: kavlad Россия http://www.wavesoft.ru
Дата: 05.05.05 05:50
Оценка: 3 (1)
Здравствуйте, Mazay, Вы писали:

M>Мало того что этот код травмирует психику , так он ещё и не улавливает наличие удалённых записей. Чего и следует ожидать, т.к. Next проскакивает удалённые записи. Возникает вопрос: как это сделать по-человечески?


Не надо травмировать психику — надо читать доки

В help'е делфей есть раздел Developing Database Applications а в нем подраздел Using batch updates — как раз про ADO
... << RSDN@Home 1.1.4 beta 4 rev. 302>>
Re[3]: Как определить наличие изменений в BatchUpdate таблиц
От: Oleg A. Bachin Украина  
Дата: 05.05.05 07:08
Оценка:
дравствуйте, kavlad, Вы писали:

K>Здравствуйте, Oleg A. Bachin, Вы писали:


OAB>>в свое время так и делал... мало кто реализует кэш изменений и темболее их историей.

OAB>>немного офтопа-рекламы: мой знакомый такое делал для компонент под информикс, по-моему IDAC называется, вроде собирался на том же движке под ODBC написать, мож еще под что. там бы можно было пробежаться по измененным записям. но поскольку я давно предпочитаю использовать слой бизнес-логики, мне сейчас это не актуально (у меня просто нет понятия таблица).

K>Хе-хе...


K>Можно тривиально использовать TClientDataSet или любой memory dataset.


эт еонечно тривиально, но зачем? зачем мне кэш записей если у меня есть объекты!?
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Best regards,
Oleg A. Bachin
Re[4]: Как определить наличие изменений в BatchUpdate таблиц
От: kavlad Россия http://www.wavesoft.ru
Дата: 05.05.05 07:19
Оценка:
Здравствуйте, Oleg A. Bachin, Вы писали:

OAB>эт еонечно тривиально, но зачем? зачем мне кэш записей если у меня есть объекты!?


У меня тоже как ни странно
Просто решение с кешем тривиально. Особенно, для ADO.
... << RSDN@Home 1.1.4 beta 4 rev. 302>>
Re[5]: Как определить наличие изменений в BatchUpdate таблиц
От: Oleg A. Bachin Украина  
Дата: 05.05.05 08:00
Оценка:
Здравствуйте, kavlad, Вы писали:

OAB>>эт еонечно тривиально, но зачем? зачем мне кэш записей если у меня есть объекты!?


K>У меня тоже как ни странно

K>Просто решение с кешем тривиально. Особенно, для ADO.

не будем спорить ни о чем...
просто если этот объект (в вашем случае запись) начнет работать в потоке и изменяться — проблем не обберешься..
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Best regards,
Oleg A. Bachin
Re[2]: Как определить наличие изменений в BatchUpdate таблиц
От: Mazay Россия  
Дата: 05.05.05 10:37
Оценка:
Здравствуйте, kavlad, Вы писали:

K>В help'е делфей есть раздел Developing Database Applications а в нем подраздел Using batch updates — как раз про ADO


Точно! Решил проблему таким образом (из примера в хелпе ):

  t.FilterGroup := fgPendingRecords;
  t.Filtered:=true;
  result := t.RecordCount>0;


До этого пробовал подобный вариант, только вместо fgPendingRecords использовал fgPredicate (Filters to show just deleted rows). Почему-то вылетало исключение про неправильные параметры.
Главное гармония ...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.