![]() |
|
Модераторы: Akina |
![]()
|
|
| shimbo |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 23.10.2006 Репутация: нет Всего: нет |
Есть БД (MS SQL 2000) и программа на Delphi 5 добавляющая, удаляющая и редактирующая master-detail датасеты. Доступ через ADO.
Датасеты вида:
Необходимо добавить возможность undo. То есть, например, открыли датасет, что-то в нём поизменяли, потом это не понравилось, нажали на кнопочку undo, и все изменения откатились. Раньше всё это хорошо работало при помощи ADO BatchOptimistic. Но теперь master_id и detail_id - суть identity поля в MS SQL Server. В этом случае BatchOptimistic не работает, т.к. id будут известны только при реальном изменении БД. Транзакции вроде тоже не подходят. Так как блокируются таблицы и другой пользователь (или тот же самый при редактировании двух датасетов одновременно) получает деадлоки и таймауты. Что делать? |
|||
|
||||
| SergeBS |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1111 Регистрация: 10.6.2005 Где: Владимир Репутация: 5 Всего: 22 |
shimbo,
TADOConnection: BeginTrans, CommitTrans, RollbackTrans. |
|||
|
||||
| shimbo |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 23.10.2006 Репутация: нет Всего: нет |
Сейчас как раз и используются транзакции. Но возникает проблема блокировок. Если пользователь редактирует датасет, то запускается транзакция, и, если пользователь начинает редактировать другой датасет одновременно с первым, то при поптыке запуска второй транзакции возникает блокировка. Делать uncommitted транзакции не хочется, да и вообще использование длинных транзакций (как получается в этом случае) нежелательно. |
|||
|
||||
| SergeBS |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1111 Регистрация: 10.6.2005 Где: Владимир Репутация: 5 Всего: 22 |
shimbo,
Что-то не то. Демонстрирую в очередной раз телепатию: у тебя MarshalOptions = moMarshalAll (default). И вся таблица при записи даже 1 поля едет обратно на сервер. И вся естественно блокируется. Поставь что-нибудь другое. Что - догадаешься, если F1 нажмешь. |
|||
|
||||
![]()
|
| Правила форума "MS SQL" | |
|
|
Запрещается! Публиковать ссылки и обсуждать взлом чего бы то ни было.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MS SQL Server | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |