необходимо решение - 2 пользователя работают с программой - PullRequest
0 голосов
/ 19 июля 2010

Итак, я разработал это Access 2007 приложение с примерно 2 формами, большим количеством кода VBA и кучей таблиц.

Теперь бизнес хочет запустить это с сетевого диска (например, назовите его G: \).Мое текущее решение (которое я уже реализовал, имеет таблицу, похожую на:

__________________
|Setting | Value |
==================
Updating    1
UpdateBy   User1

. Итак, позвольте мне дать вам контекст. Когда приложение запускается, есть кнопка «обновление», которая обновляет локальныйтаблица с удаленного сервера, чтобы мы могли применить фильтрацию. Теперь, когда два человека (пользователь1, пользователь2) запускают приложение, и один человек нажимает кнопку обновления, поле updating устанавливается в значение true, а updateby устанавливается в их имя.Так что Пользователь номер 2 пытается обновить, он проверяет, является ли поле updating истинным, если это так, то он дает им сообщение (пользователю два, а не пользователю).

Это работает прекрасно прямо сейчас, но вот проблема: допустим, что user1 обновляет и закрывает свою программу (или убивает ее), или отключается питание, затем приложение выключается с полем updating, установленным в true.Теперь, независимо от того, кто запускает его, они не могут обновить, потому что его " уже обновляет "

Можете ли вы, ребята, придумать решение этой проблемы? Может быть, обходной путь?

Ответы [ 3 ]

2 голосов
/ 19 июля 2010

Прочитайте мою статью о том, почему вы разделились здесь:

http://www.members.shaw.ca/AlbertKallal/Articles/split/index.htm

В вышесказанном я не просто говорю вам делать это, но я говорю вам, ПОЧЕМУ вы разделены.

Это должно вам очень помочь с точки зрения пользователей, спотыкающихся друг о друга.

2 голосов
/ 19 июля 2010

Пожалуйста, не запускайте приложение Access с более чем одним пользователем, если вы не разбили базу данных.Это вызовет бесконечные неприятности.Часть данных (серверная часть) должна быть помещена на сервер, а код и формы (интерфейсная часть) должны быть размещены на рабочем столе каждого пользователя.

1 голос
/ 19 июля 2010

Рассмотрим другую стратегию блокировки.В событии click вашей кнопки «update» вы можете сначала открыть набор записей на основе вашего tblUpdateStatus (таблицы, в которой вы писали UpdateBy) с параметрами dbDenyWrite + dbDenyRead.

Set rst = db.OpenRecordset("tblUpdateStatus", _
             dbOpenTable, dbDenyWrite + dbDenyRead)

Затем выполнитедругие операции для кнопки «обновить».После этого закройте и отпустите набор записей ... который снимает блокировку tblUpdateStatus.

Перехватите ошибку, когда пользователь не может открыть набор записей (так как таблица заблокирована у другого пользователя), дайте ему сообщение, чтобы попытатьсяпозже и выйдите из подпрограммы события click.

При таком подходе, когда user1 блокирует tblUpdateStatus, но нечисто выходит из Access, ее блокировка на tblUpdateStatus освобождается.Возможно, вам даже не потребуется обновлять tblUpdateStatus, если вы не хотите записать, у какого пользователя он заблокирован.

См. Создание и использование гибких полей автонумерации (из Поваренной книги Access) для получения дополнительной информации об использовании набора записей с dbDenyWrite + dbDenyRead.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...