Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Undo для master-detail с autoincrement полями, MS SQL 2000 + ADO 
:(
    Опции темы
shimbo
Дата 23.10.2006, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 23.10.2006

Репутация: нет
Всего: нет



Есть БД (MS SQL 2000) и программа на Delphi 5 добавляющая, удаляющая и редактирующая master-detail датасеты. Доступ через ADO.      
Датасеты вида:
Код

master_id, master_data
 |-> master_id, detail_id, detail_data
                 |-> detail_id, subdetail_data

Необходимо добавить возможность undo. То есть, например, открыли датасет, что-то в нём поизменяли, потом это не понравилось, нажали на кнопочку undo, и все изменения откатились.

Раньше всё это хорошо работало при помощи ADO BatchOptimistic. Но теперь master_id и detail_id - суть identity поля в MS SQL Server. В этом случае BatchOptimistic не работает, т.к. id будут известны только при реальном изменении БД.

Транзакции вроде тоже не подходят. Так как блокируются таблицы и другой пользователь (или тот же самый при редактировании двух датасетов одновременно) получает деадлоки и таймауты.

Что делать?
PM MAIL   Вверх
SergeBS
Дата 26.10.2006, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1111
Регистрация: 10.6.2005
Где: Владимир

Репутация: 5
Всего: 22



shimbo, 
TADOConnection: BeginTrans, CommitTrans, RollbackTrans.
PM MAIL   Вверх
shimbo
Дата 26.10.2006, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 23.10.2006

Репутация: нет
Всего: нет



Цитата(SergeBS @ 26.10.2006,  16:52)
shimbo, 
TADOConnection: BeginTrans, CommitTrans, RollbackTrans.

Сейчас как раз и используются транзакции. Но возникает проблема блокировок. Если пользователь редактирует датасет, то запускается транзакция, и, если пользователь начинает редактировать другой датасет одновременно с первым, то при поптыке запуска второй транзакции возникает блокировка.
Делать uncommitted транзакции не хочется, да и вообще использование длинных транзакций (как получается в этом случае) нежелательно.
PM MAIL   Вверх
SergeBS
Дата 27.10.2006, 07:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1111
Регистрация: 10.6.2005
Где: Владимир

Репутация: 5
Всего: 22



shimbo, 
Что-то не то. 
Демонстрирую в очередной раз телепатию: у тебя MarshalOptions = moMarshalAll (default). И вся таблица при записи даже 1 поля едет обратно на сервер. И вся естественно блокируется.
Поставь что-нибудь другое. Что - догадаешься, если F1 нажмешь.  smile 

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.1011 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.