Почему пользователи 2+, общающиеся с базой данных через сеть с помощью ADODB, не могут видеть изменения друг друга в базе данных, пока все соединения не будут разорваны? - PullRequest
0 голосов
/ 16 апреля 2019

Первый вопрос здесь.Надеюсь, это не слишком многословно:

Я создал приложение Excel, использующее VBA для связи с базой данных MS Access (.accdb), которая должна иметь поддержку одновременных пользователей, обращающихся к ней.Он предназначен для размещения на сайте Sharepoint в виде доступного файла (никак не интегрированного в него).Когда я тестировал файл Excel и базу данных в моей домашней сети, это работало как очарование, транзакции и все такое.Однако, после того как я перенес его в Sharepoint, я заметил некоторые крайние отличия от того, как он действовал в моей личной сети:

  1. Методы ADODB {.open} и {.close}займет не менее 15 секунд каждый (заставляя Excel заморозить, пока не будет сделано).В связи с этим я решил открывать и закрывать соединения только один раз за время существования приложения и восстанавливать соединение, если оно разрывается по пути.Я осознаю тот факт, что это крайне не рекомендуется, но я не могу позволить своим пользователям ждать так долго.Это не вызвало никаких проблем, о которых я знаю, возможно, кроме той, которую я собираюсь объяснить.

  2. Проблема: изменения не сохраняются в фактической базе данных, если не закрыты все активные пользовательские соединения с базой данных, даже если единственной активной вещью является соединение.Все проходит без ошибок для каждого пользователя при попытке обновления, и каждый пользователь может получить доступ к его / ее изменениям, я полагаю, пока все соединения не будут разорваны.Я перепробовал все возможные типы курсора и типы блокировки, ничего не получалось.Это похоже на то, как если бы локальная копия базы данных сохранялась на компьютере пользователя (отсюда длительное ожидание при открытии и закрытии соединения), а обновления сохранялись во временной, а не фактической версии.

Я перепробовал все возможные комбинации для типов курсора, местоположения курсора, типов блокировки и чего нет (выяснил, что в моем случае динамические курсоры не поддерживаются - интересно, ответ ли это).

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

Я читаю что-тоо необходимости «очистить буфер» или «обновить курсор».Это вообще возможно / необходимо?Или дело?Если я использую курсор набора клавиш, не должны ли мои отредактированные записи показываться всем другим пользователям?(не говоря уже о новых)

Для чего это стоит, я сопоставляю путь к папке sharepoint, прежде чем получить к ней доступ.

Кто-нибудь из вас испытывал что-то подобное?Или есть предложения?

Если вам нужны примеры моего кода, я скоро его опубликую.Спасибо!

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