Есть 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 таблице?
Здравствуйте, 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 таблиц
Здравствуйте, Oleg A. Bachin, Вы писали:
OAB>в свое время так и делал... мало кто реализует кэш изменений и темболее их историей. OAB>немного офтопа-рекламы: мой знакомый такое делал для компонент под информикс, по-моему IDAC называется, вроде собирался на том же движке под ODBC написать, мож еще под что. там бы можно было пробежаться по измененным записям. но поскольку я давно предпочитаю использовать слой бизнес-логики, мне сейчас это не актуально (у меня просто нет понятия таблица).
Хе-хе...
Можно тривиально использовать TClientDataSet или любой memory dataset.
... << RSDN@Home 1.1.4 beta 4 rev. 302>>
Re: Как определить наличие изменений в BatchUpdate таблице?
Здравствуйте, Mazay, Вы писали:
M>Мало того что этот код травмирует психику , так он ещё и не улавливает наличие удалённых записей. Чего и следует ожидать, т.к. Next проскакивает удалённые записи. Возникает вопрос: как это сделать по-человечески?
Не надо травмировать психику — надо читать доки
В help'е делфей есть раздел Developing Database Applications а в нем подраздел Using batch updates — как раз про ADO
... << RSDN@Home 1.1.4 beta 4 rev. 302>>
Re[3]: Как определить наличие изменений в BatchUpdate таблиц
дравствуйте, 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, Вы писали:
OAB>>эт еонечно тривиально, но зачем? зачем мне кэш записей если у меня есть объекты!?
K>У меня тоже как ни странно K>Просто решение с кешем тривиально. Особенно, для ADO.
не будем спорить ни о чем...
просто если этот объект (в вашем случае запись) начнет работать в потоке и изменяться — проблем не обберешься..
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Best regards,
Oleg A. Bachin
Re[2]: Как определить наличие изменений в BatchUpdate таблиц
Здравствуйте, 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). Почему-то вылетало исключение про неправильные параметры.