Форум: "Базы";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
ВнизClientDataSet.ApplyUpdates(0) for 2 Dataset s Найти похожие ветки
← →
Andriy Tysh © (2004-04-14 10:43) [0]Есть два клиентских датасета.
Открываю транзакцию через АДО.
Делаю сначала ApplyUpdates(0) для первого ДС, потом для второго.
Если в каком-то ДС не все изменения сохранились делаю РоллБек.
На сервере всё чётко. А вот в ДС, в котором все данные сохранились, Delta утрарил информацию о изменениях. Как их вернуть назад, что-бы можно было и в клиенте "откатать транзакцию". Тоесть повернуть в "незаписанноё состояние".
P.S.:Надеюсь я хорошо описал трабл. Если нет, спрашивайте. Очень нужно!
← →
Andriy Tysh © (2004-04-14 10:43) [0]Есть два клиентских датасета.
Открываю транзакцию через АДО.
Делаю сначала ApplyUpdates(0) для первого ДС, потом для второго.
Если в каком-то ДС не все изменения сохранились делаю РоллБек.
На сервере всё чётко. А вот в ДС, в котором все данные сохранились, Delta утрарил информацию о изменениях. Как их вернуть назад, что-бы можно было и в клиенте "откатать транзакцию". Тоесть повернуть в "незаписанноё состояние".
P.S.:Надеюсь я хорошо описал трабл. Если нет, спрашивайте. Очень нужно!
← →
serge35 (2004-04-14 11:00) [1]Очень хорошо написал, особенно удачно нолучилась фраза - Delta утрарил информацию.
← →
serge35 (2004-04-14 11:00) [1]Очень хорошо написал, особенно удачно нолучилась фраза - Delta утрарил информацию.
← →
Andriy Tysh © (2004-04-14 11:10) [2]
> serge35 (14.04.04 11:00) [1]
Ошибка сделана только грамматическая: вместо Delta надо было написать DeltaDS-тип OleVariant, который содержит в себе изменения в КлиентДатаСете. После ApplyUpdates он очищается.
Или я неверно размышляю?
← →
Andriy Tysh © (2004-04-14 11:10) [2]
> serge35 (14.04.04 11:00) [1]
Ошибка сделана только грамматическая: вместо Delta надо было написать DeltaDS-тип OleVariant, который содержит в себе изменения в КлиентДатаСете. После ApplyUpdates он очищается.
Или я неверно размышляю?
← →
serge35 (2004-04-14 11:22) [3]Перед транзакцией сохрани данные в другом DataSet, при откате возьмешь их оттуда.
← →
serge35 (2004-04-14 11:22) [3]Перед транзакцией сохрани данные в другом DataSet, при откате возьмешь их оттуда.
← →
Nikolay M. © (2004-04-14 11:49) [4]Возможно, SavePoint-ы спасут? Правда, они скорее должно помочь при CancelUpdates...
← →
Nikolay M. © (2004-04-14 11:49) [4]Возможно, SavePoint-ы спасут? Правда, они скорее должно помочь при CancelUpdates...
← →
asp © (2004-04-14 12:23) [5]Насколько понял, тебя могут спасти TField.NewValue & TField.OldValue
← →
asp © (2004-04-14 12:23) [5]Насколько понял, тебя могут спасти TField.NewValue & TField.OldValue
← →
Nikolay M. © (2004-04-14 12:28) [6]
> asp © (14.04.04 12:23) [5]
Изменил я значения поля f1 в одной записи, перешел к след записи, изменил тоже поле, вернулся к первоначальной записи и еще раз изменил f1. Как после этих манипуляций откатиться к первоначальному состоянию через Old(New)Value?
← →
Nikolay M. © (2004-04-14 12:28) [6]
> asp © (14.04.04 12:23) [5]
Изменил я значения поля f1 в одной записи, перешел к след записи, изменил тоже поле, вернулся к первоначальной записи и еще раз изменил f1. Как после этих манипуляций откатиться к первоначальному состоянию через Old(New)Value?
← →
Курдль © (2004-04-14 12:32) [7]К "первоначальному состоянию" можно откатиться с помощью DataSet.Refresh :)
← →
Курдль © (2004-04-14 12:32) [7]К "первоначальному состоянию" можно откатиться с помощью DataSet.Refresh :)
← →
asp © (2004-04-14 12:35) [8]Nikolay M. © (14.04.04 12:28) [6]> К первоначальному и откатится.
← →
asp © (2004-04-14 12:35) [8]Nikolay M. © (14.04.04 12:28) [6]> К первоначальному и откатится.
← →
Nikolay M. © (2004-04-14 12:41) [9]
> asp © (14.04.04 12:35) [8]
Read the OldValue property to examine or retrieve the original value of the field that was obtained from the dataset before any edits were posted.
В [6] я сделал Post одному поле в одной записи 1 раз и в другой записи - 2 раза. А в третьей - сделаю ему же еще десять раз. К чему откатываться будем?
← →
Nikolay M. © (2004-04-14 12:41) [9]
> asp © (14.04.04 12:35) [8]
Read the OldValue property to examine or retrieve the original value of the field that was obtained from the dataset before any edits were posted.
В [6] я сделал Post одному поле в одной записи 1 раз и в другой записи - 2 раза. А в третьей - сделаю ему же еще десять раз. К чему откатываться будем?
← →
Romkin © (2004-04-14 12:42) [10]Может, не надо? Переписывать... экзаменовать...
НАписать обработчик у cds надо, OnReconcileError, и в нем нужный флаг установить.
← →
Romkin © (2004-04-14 12:42) [10]Может, не надо? Переписывать... экзаменовать...
НАписать обработчик у cds надо, OnReconcileError, и в нем нужный флаг установить.
← →
asp © (2004-04-14 12:45) [11]Nikolay M. © (14.04.04 12:41) [9] >
...
DataSet.Edit;
DataSetFIELD1.NewValue:= DataSetFIELD1.OldValue;
DataSet.Post;
...
Я пробовал только 3 раза. Полную мат. индукцию, боюсь, не смогу осилить. :)
← →
asp © (2004-04-14 12:45) [11]Nikolay M. © (14.04.04 12:41) [9] >
...
DataSet.Edit;
DataSetFIELD1.NewValue:= DataSetFIELD1.OldValue;
DataSet.Post;
...
Я пробовал только 3 раза. Полную мат. индукцию, боюсь, не смогу осилить. :)
← →
Andriy Tysh © (2004-04-14 13:26) [12]
> Romkin © (14.04.04 12:42) [10]
А какой именно флаг, если не секрет? Ещё, понимаете, ситуация такая, что первый датасет на сервер послал всё без ошибок, а второй сделал ошибки, то я хочу в обеих ДатаСетах восстановить все изменения.
Ибо я решил так:
1.Описал переменную OldData: OleVariant;
2. Присвоил ей значение на ClientDataSet.BeforeApplyUpdates:OldData:=OwnerData;
чтобы все изменения запомнить;
3.А потом проверяю, если есть ошибка при ApplyUpdates(0) записи на сервер, то:ClientDataSet.Reconcile(OldData);
ClientDataSet.Refresh;
Правильно ли я делаю.
← →
Andriy Tysh © (2004-04-14 13:26) [12]
> Romkin © (14.04.04 12:42) [10]
А какой именно флаг, если не секрет? Ещё, понимаете, ситуация такая, что первый датасет на сервер послал всё без ошибок, а второй сделал ошибки, то я хочу в обеих ДатаСетах восстановить все изменения.
Ибо я решил так:
1.Описал переменную OldData: OleVariant;
2. Присвоил ей значение на ClientDataSet.BeforeApplyUpdates:OldData:=OwnerData;
чтобы все изменения запомнить;
3.А потом проверяю, если есть ошибка при ApplyUpdates(0) записи на сервер, то:ClientDataSet.Reconcile(OldData);
ClientDataSet.Refresh;
Правильно ли я делаю.
← →
Курдль © (2004-04-14 13:47) [13]Я все-таки не понимаю, о чем вы все судите-рядите?
Если сервер откатил все изменения взад, то что еще вам надо, кроме Refresh?
← →
Курдль © (2004-04-14 13:47) [13]Я все-таки не понимаю, о чем вы все судите-рядите?
Если сервер откатил все изменения взад, то что еще вам надо, кроме Refresh?
← →
Nikolay M. © (2004-04-14 14:24) [14]
> Курдль © (14.04.04 13:47) [13]
Грубо :)
Все же есть на клиенте, а если это вытягивается какой-нибудь немеряный отчет за несколько лет?
> asp © (14.04.04 12:45) [11]
Неплохо бы еще изменение поля присобачить, иначе не понимаю, в чем показательность твого примера.
← →
Nikolay M. © (2004-04-14 14:24) [14]
> Курдль © (14.04.04 13:47) [13]
Грубо :)
Все же есть на клиенте, а если это вытягивается какой-нибудь немеряный отчет за несколько лет?
> asp © (14.04.04 12:45) [11]
Неплохо бы еще изменение поля присобачить, иначе не понимаю, в чем показательность твого примера.
← →
Курдль © (2004-04-14 14:30) [15]
> Грубо :)
> Все же есть на клиенте, а если это вытягивается какой-нибудь
> немеряный отчет за несколько лет?
Скажу больше - грубо и не женственно! :)
Я не работал с ClientDataSet столь напряженно, но многие инструменты для связи с СУБД (DOA, SQLDirect, IB...) имеют ряд полезных свойств и событий типа onApplyRecord onUpdateRecord onCancelUpdate и т.п.
← →
Курдль © (2004-04-14 14:30) [15]
> Грубо :)
> Все же есть на клиенте, а если это вытягивается какой-нибудь
> немеряный отчет за несколько лет?
Скажу больше - грубо и не женственно! :)
Я не работал с ClientDataSet столь напряженно, но многие инструменты для связи с СУБД (DOA, SQLDirect, IB...) имеют ряд полезных свойств и событий типа onApplyRecord onUpdateRecord onCancelUpdate и т.п.
← →
Andriy Tysh © (2004-04-14 14:34) [16]Спецы, проанализируйте мои соображения об решении, которые я чуть выше описал.
> Курдль © (14.04.04 13:47) [13]
Представь себе, что ДатаСет с сервера берёт только два поля: ID и Name. А есть ещё, InternalCalc Field например с именем Cena. Два первых поля ты не можеш изменять, а третье-на здоровье. Вот ты изменил несколко его значений, скажем в 123-х записях. Потом ApplyUpdates(0). Ошибка на 99-й записи, РоллБек. Значения на сервере не сменились, а на клиенте как значения 123-х записей тебе оставить.
А теперь представь, что у тебя два разных датасета и ты хочеш записать их обоих и только обоих. Один не покатит. Как быть.
← →
Andriy Tysh © (2004-04-14 14:34) [16]Спецы, проанализируйте мои соображения об решении, которые я чуть выше описал.
> Курдль © (14.04.04 13:47) [13]
Представь себе, что ДатаСет с сервера берёт только два поля: ID и Name. А есть ещё, InternalCalc Field например с именем Cena. Два первых поля ты не можеш изменять, а третье-на здоровье. Вот ты изменил несколко его значений, скажем в 123-х записях. Потом ApplyUpdates(0). Ошибка на 99-й записи, РоллБек. Значения на сервере не сменились, а на клиенте как значения 123-х записей тебе оставить.
А теперь представь, что у тебя два разных датасета и ты хочеш записать их обоих и только обоих. Один не покатит. Как быть.
← →
Курдль © (2004-04-14 14:39) [17]Я обычно не даю юзерям таких вольностей, как редактирование 123-х записей с возможностью отката. Причем, на каждый сеанс редактирования поднимаю форму - шоб все было расписано хинтами и ругалось при попытке ввода ошибочного значения.
← →
Курдль © (2004-04-14 14:39) [17]Я обычно не даю юзерям таких вольностей, как редактирование 123-х записей с возможностью отката. Причем, на каждый сеанс редактирования поднимаю форму - шоб все было расписано хинтами и ругалось при попытке ввода ошибочного значения.
← →
Andriy Tysh © (2004-04-14 16:55) [18]
> Курдль © (14.04.04 14:39) [17]
Согласен, очень хорошо делаете.
А если облом на сервере - невозможно было записать в тот момент, нет сети, или ... что-то ещё. Ведь невозможно всё на клиенте предотвратить?
Что тогда делать?
← →
Andriy Tysh © (2004-04-14 16:55) [18]
> Курдль © (14.04.04 14:39) [17]
Согласен, очень хорошо делаете.
А если облом на сервере - невозможно было записать в тот момент, нет сети, или ... что-то ещё. Ведь невозможно всё на клиенте предотвратить?
Что тогда делать?
← →
Desdechado © (2004-04-14 17:25) [19]немного странно - что за отчет такой, с возможностью редактирования всего в нем?
а ты при неудаче CancelUpdates случайно не вызываешь?
← →
Desdechado © (2004-04-14 17:25) [19]немного странно - что за отчет такой, с возможностью редактирования всего в нем?
а ты при неудаче CancelUpdates случайно не вызываешь?
← →
Курдль © (2004-04-14 17:32) [20]
> А если облом на сервере - невозможно было записать в тот
> момент, нет сети, или ... что-то ещё. Ведь невозможно всё
> на клиенте предотвратить?
Тогда речь будет идти не о 123-х записях, а максимум - в нескольких записях связанных таблиц. В таком случае ошибка легко отлавливается и юзеру доходчиво разъясняется, в чем он не прав :)
← →
Курдль © (2004-04-14 17:32) [20]
> А если облом на сервере - невозможно было записать в тот
> момент, нет сети, или ... что-то ещё. Ведь невозможно всё
> на клиенте предотвратить?
Тогда речь будет идти не о 123-х записях, а максимум - в нескольких записях связанных таблиц. В таком случае ошибка легко отлавливается и юзеру доходчиво разъясняется, в чем он не прав :)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.033 c