-
Добрый день!
Есть БД на MS SQL 2005 для работы с ней используются компоненты ADO.
Пользователю надо добавить некую запись (например, о Клиенте) в БД. При этом запись будет создаваться не только в таблице КЛИЕНТ, но и в нескольких связаных таблицах.
Для этого Пользователю предлагается мастер - в котором он заполняет нужные поля.
Редактирование записей происходит в разных формах с ДБ-компонентами и ADODataSet. Мастер представляет из себя некий набор из фреймов, составляющих формы для редактирования (с нужными ограничениями). Примерная работа мастера: * Открываем транзакцию. * создаем набор "пустых" записей, нужных для заполнения данных о Клиенте. * Пользователь проходясь по вкладкам мастера редактирует эти данные. * Пользователь нажимает на кнопку "Ок" - изменения фиксируются. * Пользователь нажимает на кнопку "Отмена" - транзакция откатывается.
Проблема: При открытии транзакции adocMSSQL.BeginTrans; Блокируется вся таблица КЛИЕНТ.
Как правильно организовать работу приложения и Пользователя?
-
в sql транзакцию запускать. Begin tran insert into ... insrt into ... update commit tran
-
Транзакция стартуется перед выполнением реальных запросов к БД, а не перед тисканьем компонентов редактирования.
-
> Транзакция стартуется перед выполнением реальных запросов > к БД, а не перед тисканьем компонентов редактирования.
Ваша правда!
Как сделать чтобы пользователь мог создать несколько записей в связаных таблицах, редактировать их, и при необходимости, отменить свои действия вплоть до отмены создания записей?
-
Ещё раз - пользователь не балуется с записями в таблицах, но играется с записями в наборах данных. Как максимум. Когда надо отобразить изменения на реальные таблицы - тут уж и тр-ию. стартует, и отображает, и т.д. Такова базовая идеология, реализованная в АДО. И не только в нём...
-
> Блокируется вся таблица
Кто тебе сказал что вся ?
> Как сделать
см. справку по теме "Using batch updates"
-
> Ещё раз - пользователь не балуется с записями в таблицах, > но играется с записями в наборах данных. Как максимум.
Точно! Вопрос снят :) Спасибо
|