Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > 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). А если с рекордсетом - то построчно? это дополнительные тормоза. Вообще тема интересная - токо надо будет подчитать про отс.рекордсет - может и можно что-то придумать с ним на эту тему. В любом случае - спасибо. |