Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.03.16;
Скачать: CL | DM;

Вниз

Транзакции в ADO   Найти похожие ветки 

 
DimaL   (2007-10-23 03:35) [0]

Есть программа, работающая с БД Access. В БД хранятся документы (примерно как в 1С "Один ко многим"). При начале редактирования документа Открывается транзакция
ADOConnection.BeginTrans
и закрывается при закрытии документа. Проблема в следующем: Пока открыта транзакция доступ ко всем оспользуемым в транзакции таблицам полностью заблокирован. Как убрать блокировки.


 
ЮЮ ©   (2007-10-23 04:36) [1]

Отказаться от
> При начале редактирования документа Открывается транзакция
> 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.


 
Sergey13 ©   (2007-10-23 08:46) [2]

> [0] DimaL   (23.10.07 03:35)
> Как убрать блокировки.

Тебе надо разобраться с транзакциями - что это такое и с чем это едят. Ты же пытаешься вылечить закономерные последствия неправильного их применения.


 
Сусл ©   (2007-10-23 11:12) [3]


> Как убрать блокировки.

наверное можно это в Access (в MS-SQL, например, запросто with no lock). Но вот последствия будут не самыми радостными. Ибо будешь читать грязные данные.

т.о. поддерживаю [1] полностью.


 
DimaL   (2007-10-24 03:28) [4]

Возможно я выбрал не удачный подход. Но каким образом можно решить такую задачу работы с документом?


 
Сусл ©   (2007-10-24 11:19) [5]


> Возможно я выбрал не удачный подход. Но каким образом можно
> решить такую задачу работы с документом

мы ее решаем так:
1. есть спец. механизмы блолкировок. нет те, которые предоставляет mssql-server, а свой механизм. интерфейс к нему типа ObjectMark и ObjectUnmart. параметром передается идентификатор объекта.
2. клиент берет объект на редактирование, предварительно выставляя макр (по нашему блокировку) на объект. никто другой более взять на редактирование не может.
3. при сохранении:
 а. begin tran.
 b. update (запись измененных данных объекта)
 c. commit
 d. OjbectUnmark.


 
Val ©   (2007-10-24 15:07) [6]

>..есть спец. механизмы блолкировок. нет те, которые предоставляет mssql-
>server, а свой механизм..
это попытка приделать костыль эмуляции блокировки уровня записи на сервере-блокировочнике?


 
Val ©   (2007-10-24 15:13) [7]

>DimaL
"Неправильность" подхода в данном случае, в основном, в том, что вы начинаете "длинную" транзакцию. Стоит обернуть в транзакцию только непосредственную передачу изменений на сервер.


 
Сусл ©   (2007-10-25 12:55) [8]


>  [6] Val ©   (24.10.07 15:07)
> >..есть спец. механизмы блолкировок. нет те, которые предоставляет
> mssql-
> >server, а свой механизм..
> это попытка приделать костыль эмуляции блокировки уровня
> записи на сервере-блокировочнике?


э... даже отвечать не хочется, ибо "костыль" и "приделасть" не располагают на нужный лад.


>  [7] Val ©   (24.10.07 15:13)
> >DimaL
> "Неправильность" подхода в данном случае, в основном, в
> том, что вы начинаете "длинную" транзакцию. Стоит обернуть
> в транзакцию только непосредственную передачу изменений
> на сервер.


о том и речь - транзакция только при сохранении.



Страницы: 1 вся ветка

Текущий архив: 2008.03.16;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
15-1202232366
Thumbs.db
2008-02-05 20:26
2008.03.16
Thumbs.db


11-1185173900
rvi
2007-07-23 10:58
2008.03.16
Отчет


15-1202145054
Kerk
2008-02-04 20:10
2008.03.16
Борьба с пробками


11-1185468313
Dy1
2007-07-26 20:45
2008.03.16
Memo и RichEdit не отображают текст под W98


2-1202993472
Свой
2008-02-14 15:51
2008.03.16
Не могу открыть базу под IIS