Используйте VBA (ADODB) в MSAccess для добавления данных из удаленной БД в локальную таблицу без блокирования записей в удаленной БД - PullRequest
0 голосов
/ 27 декабря 2011

Я пытаюсь разделить существующее приложение MS Access на внешний интерфейс (который будет запускаться локально на компьютере пользователя) и на внутренний сервер (который будет размещен на сетевом файловом сервере) и позволяет пользователям выбирать между режимами «только чтение» и «запись». Идея состоит в том, что только один пользователь может одновременно использовать режим «записи», что предотвращает одновременное распределение одного и того же инвентаря среди клиентов. Моя проблема заключается в том, что приложение в настоящее время обрабатывает параллелизм, требуя, чтобы пользователи открывали файл .bat, который позволяет им входить в приложение только в том случае, если файл .ldb еще не существует (в настоящее время нет режима только для чтения), поэтому мне нужно предотвратить пользователи, получающие доступ к рабочим данным в режиме «только для чтения», создают файл .ldb и блокируют других пользователей.

Самая большая проблема для реализации этого состоит в том, что пользователи должны иметь доступ на запись к временным таблицам в файле MS Access (.mdb), установленном локально. Я пытался реализовать это с помощью связанной таблицы, но я не уверен, как я могу контролировать, когда записи блокируются с использованием связанных таблиц (что создает файл .ldb).

Ответы [ 3 ]

1 голос
/ 27 декабря 2011

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

http://office.microsoft.com/en-us/access-help/set-options-for-a-shared-access-database-mdb-HP005188297.aspx

Примечание: : Yikes. Использование Access в общей сетевой среде - это не весело. Я надеюсь, что в этом файле нет ничего важного / чувствительного ко времени / безопасного. Файл .ldb, который не удаляется и не блокирует других пользователей, - это то, что я регулярно использую в этой ситуации. Я полагаю, что разделение файла Access на интерфейс и бэкэнд, как вы сделали, является первым шагом. Тогда использование связанных таблиц с базой данных SQL Server может помочь решить эти проблемы. Но если вы идете на этот уровень усилий, возможно, вы захотите отказаться от доступа и получить продукт COTS или создать новое приложение.

0 голосов
/ 28 декабря 2011

Моя проблема в том, что приложение в настоящее время обрабатывает параллелизм, требуя, чтобы пользователи открывали файл .bat, который позволяет им входить в приложение только в том случае, если файл .ldb еще не существует (в настоящее время нет режима только для чтения)поэтому мне нужно запретить пользователям, имеющим доступ к рабочим данным в режиме «только для чтения», создавать файл .ldb и блокировать других пользователей.

-> Если каждый пользователь имеет свою собственную копиювнешнего интерфейса на его собственной машине, вы должны проверить файл .ldb фонового .

Я думаю, было бы проще дать всем доступ для записибэкэнд и управляйте фактической записью программно с помощью поля «заблокировано пользователем X» в бэкэнде:

Вы сказали:

, предотвращая выделение одного и того же инвентаря для нескольких клиентов

  1. Если это единственная причина перевода всех пользователей, кроме одного, в режим только для чтения, вы можете поместить поле «заблокировано пользователем X» на изобретателяу стола.Если кто-то начинает изменять (или даже открывает) часть инвентаря, обновите запись, указав свое имя пользователя, и снова удалите имя пользователя, когда он закончит.
    Если другой пользователь попытается открыть ту же часть инвентаря,имя первого пользователя уже будет в поле «заблокировано пользователем X», поэтому вы можете перевести второго пользователя в режим только для чтения.

  2. Если инвентарные материалы неединственная проблема, и все остальные пользователи действительно не могут изменять что-либо , как только кто-то уже редактирует, вы можете создать новую таблицу только с одним столбцом и одной строкой и использовать это как "заблокированныйпользователем X ".Как только внутри появится имя пользователя, вы можете перевести всех остальных в режим только для чтения.

Независимо от того, как вы это сделаете, вам придется предоставить какое-то меню администратора, поэтомуесли во время редактирования происходит сбой внешнего интерфейса, кому-то другому необходимо иметь возможность разблокировать заблокированные данные этого пользователя (= удалить его имя пользователя из поля «заблокировано пользователем Х»).

0 голосов
/ 27 декабря 2011

В зависимости от того, какую версию Access вы используете, существует много возможностей для разработки пользовательского интерфейса.Другими словами, это больше похоже на проблему «интерфейса» в сравнении с проблемой «базы данных».Поскольку каждый может писать в таблицу, вы должны иметь возможность проверять в режиме реального времени (производительность может быть проблемой с большими наборами данных), независимо от того, было ли конкретное добавлено в инвентарь или нет.

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

Если вам нужна дополнительная помощь поДоступ к связанным материалам, Access Monster - это хороший форумный форум, который имеет дело только с доступом.

...