Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.032 c
1-1082853146
val_5
2004-04-25 04:32
2004.05.09
препроцессорная переменная - где компил: D6 или D7


1-1082964495
Серж
2004-04-26 11:28
2004.05.09
CASE для Дельфи


7-1080149340
Neogrand
2004-03-24 20:29
2004.05.09
Системный приоритет


6-1079554274
DEMON_XXX
2004-03-17 23:11
2004.05.09
Как получить e-mail адреса из контактной книги Outlook


3-1081920807
Pako
2004-04-14 09:33
2004.05.09
индексы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский