Главная страница
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.016 c
3-1193151397
opoloXAI
2007-10-23 18:56
2008.03.16
Знак диаметра в DBGrid


2-1203099019
Danila
2008-02-15 21:10
2008.03.16
Нет Access Violation после двух Free ! :)


3-1193148576
Torin
2007-10-23 18:09
2008.03.16
Глюк DBE при обращению к полю типа DATETIME YEAR TO FRACTION(3)


2-1203493920
Александр
2008-02-20 10:52
2008.03.16
Excel в OleContainer


2-1203233360
Mk30
2008-02-17 10:29
2008.03.16
Нужна помощь! Как можно в Делфи определить момент подключ.флешки?