![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Транзакции в ADO [D7, Access]
DimaL © (2007-10-23 03:35:00)Есть программа, работающая с БД Access. В БД хранятся документы (примерно как в 1С "Один ко многим"). При начале редактирования документа Открывается транзакция
ADOConnection.BeginTrans
и закрывается при закрытии документа. Проблема в следующем: Пока открыта транзакция доступ ко всем оспользуемым в транзакции таблицам полностью заблокирован. Как убрать блокировки.
Сусл (2007-10-25 12:55:00) [1]
> [6] Val © (24.10.07 15:07)
> >..есть спец. механизмы блолкировок. нет те, которые предоставляет
> mssql-
> >server, а свой механизм..
> это попытка приделать костыль эмуляции блокировки уровня
> записи на сервере-блокировочнике?
э... даже отвечать не хочется, ибо "костыль" и "приделасть" не располагают на нужный лад.
> [7] Val © (24.10.07 15:13)
> >DimaL
> "Неправильность" подхода в данном случае, в основном, в
> том, что вы начинаете "длинную" транзакцию. Стоит обернуть
> в транзакцию только непосредственную передачу изменений
> на сервер.
о том и речь - транзакция только при сохранении.
Val (2007-10-24 15:13:00) [2]>DimaL
"Неправильность" подхода в данном случае, в основном, в том, что вы начинаете "длинную" транзакцию. Стоит обернуть в транзакцию только непосредственную передачу изменений на сервер.
Val (2007-10-24 15:07:00) [3]>..есть спец. механизмы блолкировок. нет те, которые предоставляет mssql-
>server, а свой механизм..
это попытка приделать костыль эмуляции блокировки уровня записи на сервере-блокировочнике?
Сусл (2007-10-24 11:19:00) [4]
> Возможно я выбрал не удачный подход. Но каким образом можно
> решить такую задачу работы с документом
мы ее решаем так:
1. есть спец. механизмы блолкировок. нет те, которые предоставляет mssql-server, а свой механизм. интерфейс к нему типа ObjectMark и ObjectUnmart. параметром передается идентификатор объекта.
2. клиент берет объект на редактирование, предварительно выставляя макр (по нашему блокировку) на объект. никто другой более взять на редактирование не может.
3. при сохранении:
а. begin tran.
b. update (запись измененных данных объекта)
c. commit
d. OjbectUnmark.
DimaL (2007-10-24 03:28:00) [5]Возможно я выбрал не удачный подход. Но каким образом можно решить такую задачу работы с документом?
Сусл (2007-10-23 11:12:00) [6]
> Как убрать блокировки.
наверное можно это в Access (в MS-SQL, например, запросто with no lock). Но вот последствия будут не самыми радостными. Ибо будешь читать грязные данные.
т.о. поддерживаю [1] полностью.
Sergey13 (2007-10-23 08:46:00) [7]> [0] DimaL (23.10.07 03:35)
> Как убрать блокировки.
Тебе надо разобраться с транзакциями - что это такое и с чем это едят. Ты же пытаешься вылечить закономерные последствия неправильного их применения.
ЮЮ (2007-10-23 04:36:00) [8]Отказаться от
> При начале редактирования документа Открывается транзакция
> ADOConnection.BeginTrans
Use the LockType ltBatchOptimistic to open a dataset in batch update mode.
Call UpdateBatch to write any pending updates to disk for a dataset that is in batch update mode to the associated database.