Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > ADO Access Трансакции и многопольз.работа


Автор: kulibin 13.8.2005, 15:19
Возникла такая проблема: аксес не даёт доступа к бд другим процессам при открытии трансакции в одном из процессов
Мне нужно при многопользовательской работе с этой бдой пользоваться трансакциями.
Или может как то по другому - суть в том, что с бд проводятся длительные операции по удалению и вставке записей. Пока не закончен блок операций - другим пользователям не обязательно видеть этот полуфабрикат. А если открыть трансакцию - аксес рубит всем доступ к бд.
Может кто сталкивался с таким? Можно ли вообще в аксесе использовать трансакции при многопользовательской работе. Или как-то по другому сделать то же.

Автор: Akina 13.8.2005, 19:19
Транзакция в Аксессе - это подпорка. Она предполагает безусловную блокировку изменяемой таблицы.

Выход: изготовить временную копию таблицы, провести в ней обновление, после чего:

заблокировать основную таблицу, удалить ВСЕ записи и затем вставить все записи из временной таблицы.

или

удалить основную таблицу, переименовать временную в основную.

Модератор: Проверяйте орфографию в своих постингах. Пожалуйста.

Автор: kulibin 13.8.2005, 23:39
Да уж . . . аксес, блин
пора его менять на что-то - это так, лирическое отступление
спасибо за совет - съэконимили мне массу времени.
буду пробовать темпорари тейбл. Интересно - он то в аксесе если создал его один процесс - другим виден, или прийдётся как-то руками обеспечивать уникальное имя таблицам? Попробую.

Автор: Akina 14.8.2005, 19:55
если это действительно temporary table - кроме владельца-создателя ее видит только администратор базы... при условии что работает секьюрность, а то все админы и все видят... с другой стороны, чтобы работать с базой неизвестной тебе структуры - это какой код написАть надо (не, как - я знаю, но зачем?)... а сгенерить уникальное имя временной таблицы - раз плюнуть...

Автор: kulibin 15.8.2005, 10:39
Та да. Сроки просто поджимают - не хотелось сильно в творческие поиски углубляться. Да и человек я такой - никакой дисциплины. Мне токо дай - так я и забуду что надо было сделать.
Спасибо.

Автор: leniviy 23.8.2005, 09:35
kulibinМожно вопрос? Как так получилось, что перекачка таблицы целиком быстрее, чем непосредственное обновление данных? Если Ваша прога в режиме открытой транзакции ждет ответа пользоваетеля, то, имхо, можно использовать отвязанный ado recordset в режиме BatchOptimistic: все изменения данных будут в памяти, пока на OK не нажмешь ( если конечно на ado писать )

Автор: kulibin 23.8.2005, 13:00
я без рекордсета: connection.exequt "insert into . . .", adaffectnorecords
Почему? вопрос интересный - но сложный.
прикол не в том, чтобы пользователь нажал "ок" - просто в из таблицы удаляется большой объём данных а потом из excel заливается построчно такой же.
Пока идёт эта операция остальные пользователи должны видеть таблицу с удаленными записями, а не с частично добавленными.
Не пользовался отвязным рекордсетом - и не умею.(токо из ado.net знаю что это такое - немного). Но вот какая штука - удаляю я большое к-во записей так: "delete from price where post='" "dfgdf" "'" - по нескольку тысяч(3-10). А если с рекордсетом - то построчно? это дополнительные тормоза.
Вообще тема интересная - токо надо будет подчитать про отс.рекордсет - может и можно что-то придумать с ним на эту тему.
В любом случае - спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)