powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите! Как оставить открытой транзакцию после TClientDataSet.ApplyUpdates
16 сообщений из 16, страница 1 из 1
Помогите! Как оставить открытой транзакцию после TClientDataSet.ApplyUpdates
    #33095704
Welor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ситуация в следующем.
-Необходимо в вносить изменения в таблицу, но при ошибке или отмене действия пользователем откатывать их.

Для этого открывается транзакция, затем после изменения данных в таблице вызывается метод TClientDataSet.ApplyUpdates. Но этот метод закрывает транзакцию и невозможно откатить действие некаким образом.

Пожалуйста подскажите как обойти этот глюк?
...
Рейтинг: 0 / 0
Помогите! Как оставить открытой транзакцию после TClientDataSet.ApplyUpdates
    #33095746
mwolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WelorСитуация в следующем.
-Необходимо в вносить изменения в таблицу, но при ошибке или отмене действия пользователем откатывать их.

Для этого открывается транзакция, затем после изменения данных в таблице вызывается метод TClientDataSet.ApplyUpdates. Но этот метод закрывает транзакцию и невозможно откатить действие некаким образом.

Пожалуйста подскажите как обойти этот глюк?

Секундочку, какой глюк?
"этот метод закрывает транзакцию" - а как можно подтвердить данные не закрыв транзакцию?

Возможно SAVEPOINT-ы то, что ты искал.
...
Рейтинг: 0 / 0
Помогите! Как оставить открытой транзакцию после TClientDataSet.ApplyUpdates
    #33095785
Welor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно! Но в том то и дело что команда ROLLBACK TO SAVEPOINT ABC недаёт никаких результатов хотя и перед изменением я и создаю его.
...
Рейтинг: 0 / 0
Помогите! Как оставить открытой транзакцию после TClientDataSet.ApplyUpdates
    #33095836
vfabr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ROLLBACK TO SAVEPOINT ABC недаёт никаких результатов
а что вы хотите чтобы она вам отдала?

хотя и перед изменением я и создаю его
кого его? результат? а как вы его создаете?
...
Рейтинг: 0 / 0
Помогите! Как оставить открытой транзакцию после TClientDataSet.ApplyUpdates
    #33095838
vfabr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TClientDataSet.ApplyUpdates это Delphi??
...
Рейтинг: 0 / 0
Помогите! Как оставить открытой транзакцию после TClientDataSet.ApplyUpdates
    #33095896
Welor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемый vfabr!!!

TClientDataSet.ApplyUpdates это Delphi!!!, но возможно и в Borland C Builder' е есть такой-же метод.

vfabrа что вы хотите чтобы она вам отдала?

откатила все изменения сделаные после её объявления

Код: plaintext
1.
2.
BEGIN TRANSACTION;
SAVEPOINT ABC;
дальше происходят изменения и если произошла ошибка
Код: plaintext
1.
ROLLBACK TO SAVEPOINT ABC
а если нет
Код: plaintext
1.
COMMIT TRANSACTION
...
Рейтинг: 0 / 0
Помогите! Как оставить открытой транзакцию после TClientDataSet.ApplyUpdates
    #33095955
vfabr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вы сами написали ответ на свой вопрос :-))

http://www.postgresql.org/docs/8.0/interactive/sql-savepoint.html
примеры смотреть
...
Рейтинг: 0 / 0
Помогите! Как оставить открытой транзакцию после TClientDataSet.ApplyUpdates
    #33096014
Vlado
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WelorСитуация в следующем.
-Необходимо в вносить изменения в таблицу, но при ошибке или отмене действия пользователем откатывать их.

Для этого открывается транзакция, затем после изменения данных в таблице вызывается метод TClientDataSet.ApplyUpdates. Но этот метод закрывает транзакцию и невозможно откатить действие некаким образом.

Пожалуйста подскажите как обойти этот глюк?2Welor
По большому счету твой пост - оффтопик,
и место ему - в форуме по дельфям,
так как TClientDataSet работает одинаково что со слоном,
что с жар-птичкой, что с любой другой субд.

Ладно, давай разбираться.
ClientDataSet - это КОПИЯ данных сервера в ОЗУ КЛИЕНТА,
т.е. в памяти твоей программы на дельфях.
Изменения, которые юзер делает в этой таблице, происходят
только в памяти клиента и никоим образом не касаются данных
на сервере. Это значит, перед редактированием данных
открывать транзакцию на сервере нафик не надо.

Далее, что такое хитрая функция ApplyUpdates.
Когда она вызывается то делает следующее:
1 - сама открывает транзакцию на сервере;
2 - все изменения в данных, которые юзер наредактировал,
преобразует в набор SQL-запросов и посылает их на сервер;
3 - если сервер все схавал без вопросов, делает транзакции COMMIT и возвращает 0,
Если же сервер поперхнулся, то делает транзакции ROLLBACK и возвращает
количество серверных отрыжек, т.е. не ноль.

Отсюда поведение программера такое.
1. Если юзер нажал на кнопку Сохранить, вызываем ApplyUpdates и смотрим чему
оно равно. Если =0 - все тип-топ.
Если <>0, значит все изменения сервер проигнорировал, и нам осталось вернуть
копию данных в ОЗУ в исходное состояние до редактирования -
вызвать (не помню процедуру или функцию) CancelUpdates.
2. Если юзер решил отменить все свое редактирование (нажал на кнопку Отмена) -
просто вызываем CancelUpdates.
...
Рейтинг: 0 / 0
Помогите! Как оставить открытой транзакцию после TClientDataSet.ApplyUpdates
    #33096335
Welor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемый Vlado, спасибо за ответ, но в том то и дело что во время работы проги
мне приходится переключать DBGrid между различными таблицами. Загружать сразу 2 таблицы в ОЗУ немного накладно, поэтому и приходится временно сохранятьь данные в таблице, и мне хотелось созданием новой транзакции и работая внутри неё откатывать действия сделанные методом ApplyUpdates если юзеру вдруг вздумается отменить действие.
Если бы мне приходилось работать только с одной таблицей тогда описанный тобой метод отлично подходит, но здесь я не знаю как реализовать задание.

Работая с MS SQL Server 2000 мне удалось созданием транзакции реализовать эту прогу, всё работает ништяк. Как оказалось MS SQL Server 2000 поддерживает вложенные транзакции и транзакция которую создаёт метод ApplyUpdates не закрывает транзакцию высшего уровня, но в том то и дело что нужно работать с PostgreSQL.

Не знаешь ли можно создавать аналогичные структурированные транзакции и в PostgreSQL.

Спасибо за ответ зарание!!!
...
Рейтинг: 0 / 0
Помогите! Как оставить открытой транзакцию после TClientDataSet.ApplyUpdates
    #33096378
Vlado
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Откажись от услуг ApplyUpdates и сам контролируй транзакции,
сэйвпойнты, sql-запросы и прочая.
Не пугайся - это проще, чем кажется на первый взгляд :)
...
Рейтинг: 0 / 0
Помогите! Как оставить открытой транзакцию после TClientDataSet.ApplyUpdates
    #33097623
Welor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо за ответы.

Попробую отказаться от этого метода.

Извеняюсь за задержку в ответе! Непредвиденная командировка.
...
Рейтинг: 0 / 0
Помогите! Как оставить открытой транзакцию после TClientDataSet.ApplyUpdates
    #33097756
Vlado
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WelorПопробую отказаться от этого метода...
Не факт, что это сильно облегчит жизнь.
Вызывает подозрения сама логика программы.
Позволять висеть транзакции неопределенное время ради удобства отката -
что-то не то. (тетя начала редактировать данные,
а тут звонок с обсуждением последнего события светской жизни)
Возможно, хорошо продумамши структуру, и отказываться ни от чего не придется,
и жизнь себе мал-мала скрасить.
...
Рейтинг: 0 / 0
Помогите! Как оставить открытой транзакцию после TClientDataSet.ApplyUpdates
    #33097887
Welor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Логика программы подрузумевает быстрое реагирвание на ситуацию. Она будет работать в местах где у тётей и дядей не будет времени разговаривать про всетскую жизнь.!
Хотя Мысль хорошая! Нужно будет поставить таймер активности юзера и через определённое время закрывать транзакцию.
Спосибо за совет!!!
...
Рейтинг: 0 / 0
Помогите! Как оставить открытой транзакцию после TClientDataSet.ApplyUpdates
    #33097956
Vlado
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё. Умолкаю.
В подпорках и нашлёпках не мастак.
...
Рейтинг: 0 / 0
Помогите! Как оставить открытой транзакцию после TClientDataSet.ApplyUpdates
    #33097992
Welor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подпорки и нашлёпки говориш!!!

Дык это же основа современного программарования в атмосфере всеобщего торопыжнечества!!!

На то что один создал другой завсегда нашлёпки сделать может.,
То, что не выходит обычным способом зачастую получается с помощью топора и такой-то ........
...
Рейтинг: 0 / 0
Помогите! Как оставить открытой транзакцию после TClientDataSet.ApplyUpdates
    #33098030
Welor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за помощь!
И извените если что не так!!!
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите! Как оставить открытой транзакцию после TClientDataSet.ApplyUpdates
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]