Установка DB Доступа MS для многопользовательского доступа

Главной причиной это полезно в промышленности, являются плагины, созданные сверх базовой функциональности. Почти вся активная разработка Matlab в течение последних нескольких лет сфокусировалась на них.

, К сожалению, у Вас не будет большой возможности использовать их в учебной среде.

25
задан Toby Allen 8 November 2009 в 08:55
поделиться

5 ответов

Я считаю ответы на этот вопрос проблематичными, запутанными и неполными, поэтому я постараюсь сделать лучше.

Q1: Как можно мы уверены, что пользователь записи может вносить изменения в данные таблицы, в то время как другие пользователи используют данные? Блокируют ли читающие пользователи таблицы? Должен ли пользователь записи накладывать блокировки на стол? Делает ли Access это за нас, или мы должны явно это кодировать?

На самом деле никто не ответил на этот вопрос полностью. Информация о настройке блокировок в параметрах доступа не имеет ничего общего с блокировкой чтения или записи. Никаких блокировок vs. Все записи vs. Отредактированная запись - это то, как вы устанавливаете блокировку записи по умолчанию для WRITES.

  • Отсутствие блокировок означает, что вы используете ОПТИМИСТИЧЕСКУЮ блокировку, что означает, что вы разрешаете нескольким пользователям редактировать запись, а затем сообщаете им постфактум, если запись изменилась после того, как они начали свои собственные изменения. Оптимистическая блокировка - это то, с чего вы должны начать, поскольку для ее реализации не требуется кодирования, а для небольших групп пользователей это почти никогда не вызывает проблем.

  • All Records означает, что вся таблица блокируется каждый раз при запуске редактирования.

  • ] Отредактированная запись означает, что меньше записей блокируется, но то, будет ли это одна запись или более одной записи, зависит от того, настроена ли ваша база данных для использования блокировки на уровне записи (впервые добавленной в Jet 4) или блокировки на уровне страницы. Честно говоря, я никогда не думал, что стоит устанавливать блокировку на уровне записи, поскольку оптимистическая блокировка решает большинство проблем.

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

Теперь, что касается вашего фактического вопроса, есть несколько способов выполнить ограничение некоторых пользователей только для чтения и предоставления другим права записи. Безопасность на уровне пользователя Jet была предназначена для этой цели и отлично работает, поскольку ' s «безопасность» для любого значимого определения термина. В общем, пока вы используете хранилище данных Jet / ACE, лучшая безопасность, которую вы получите, - это Jet ULS. Да, его можно взломать, но ваши пользователи совершат серьезное преступление, нарушив его, так что этого может быть достаточно.

Я бы вообще не стал внедрять Jet ULS и вместо этого просто спроектировал бы формы редактирования данных так, чтобы они проверяли пользователь вошел в систему Windows и сделал формы доступными только для чтения или записи, в зависимости от того, какие пользователи должны иметь доступ. Хотите ли вы записывать членство в группах в таблице данных или поддерживать группы безопасности Windows для этой цели, зависит от вас. Вы также можете использовать файл рабочей группы Jet для решения этой проблемы и предоставить другой файл system.mdw для пользователей записи. Пользователи с правами только для чтения будут прозрачно входить в систему как администратор, а тем, кто вошел в систему как администратор, будет предоставлен доступ только для чтения. Пользователи, выполняющие запись, будут входить в систему под другим именем пользователя (прозрачно, в ярлыке, который вы предоставляете им для запуска приложения, без указания пароля), и это будет использоваться для настройки форм как для чтения или записи.

Если вы используете Jet ULS, это может стать очень непростым делом, чтобы понять это правильно. Он включает в себя блокировку всех таблиц как доступных только для чтения (или даже не для этого), а затем использование запросов RWOP для предоставления доступа к данным. За 14 лет профессиональной разработки Access я сделал только одно такое приложение.

Подводя итог моим ответам на части вашего вопроса:

Как мы можем убедиться, что пользователь записи может вносить изменения в данные таблицы, в то время как другие пользователи используют данные?

Я бы порекомендовал сделать это в приложении, установка форм для чтения / только или редактирования во время выполнения в зависимости от входа пользователя в систему. Самый простой подход - сделать ваши формы доступными только для чтения и изменить их на редактируемые для пользователей записи, когда они открывают форму.

Установили ли читающие пользователи блокировки на таблицы?

Не в каком-либо значимом смысле. В Jet / ACE есть блокировки чтения, но они существуют только для поддержания состояния отдельных представлений и для обновления данных для пользователя. Они не блокируют любые операции записи, хотя накладные расходы на их отслеживание теоретически замедляют работу. Недостаточно беспокоиться.

Должен ли пользователь записи накладывать блокировки на таблицу?

Доступ в сочетании с Jet / ACE делает это за вас автоматически, особенно если вы выбираете оптимистичную блокировку по умолчанию. Ключевым моментом здесь является то, что приложения Access связаны с данными, поэтому, как только форма загружается, запись имеет блокировку чтения, и как только запись редактируется, то, заблокирована ли она для записи для других пользователей, определяется тем, используете ли вы оптимистичную или пессимистическую блокировку. Опять же, это то, о чем Access позаботится за вас со своим поведением по умолчанию в связанных формах. Вы не беспокоитесь ни о чем из этого до тех пор, пока не столкнетесь с проблемами.

Делает ли Access это за нас или мы должны явно кодировать это?

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

Q2: Есть ли какие-либо общие проблемы с «транзакциями MS Access», о которых нам следует знать?

Jet / ACE поддерживает транзакции фиксации / отката, но мне не ясно, что вы имеете в виду в этом вопросе. В общем, я не использую транзакции, кроме как для поддержания атомарности, например, при создании счета-фактуры или при любом обновлении, которое включает несколько таблиц. Он работает примерно так, как вы ожидаете, но на самом деле в нем нет необходимости для подавляющего большинства операций в приложении Access.

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

Для определенных видов операций это может быть проблематичным, и иногда уместно редактировать данные в Access с помощью несвязанных форм. Но, по моему опыту, это случается очень редко. Дело не в том, что я не использую несвязанные формы - я использую их много для диалогов и т.п. - просто мои приложения не редактируют таблицы данных с несвязанными формами. Почти без исключений все мои приложения редактируют данные с помощью связанных форм.

Теперь несвязанные формы на самом деле довольно легко реализовать в Access (особенно если вы называете элементы управления редактированием так же, как и базовые поля), но при использовании несвязанных форм редактирования данных действительно отсутствует смысл использования Access, а именно: привязка сделана за вас. И главный недостаток отмены привязки состоит в том, что вы теряете все события формы на уровне записи, такие как OnInsert, BeforeUpdate и т. Д.

Q3. Можем ли мы работать с формами, запросами и т. Д., Пока они используются? Как мы можем «программировать», не мешая пользователям?

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

Q4. Какие настройки в MS Access влияют на то, как обрабатываются вещи?

«Вещи?» Какие вещи?

Q5. Наш опыт в основном связан с Oracle. Чем отличается Access в работе с несколькими пользователями? Есть ли такое понятие, как «уровни изоляции»? в Access?

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

Access - это инструмент для разработки приложений.

Oracle - это промышленный сервер базы данных.

Яблоки и апельсины.

Теперь, конечно, Access поставляется с ядром базы данных по умолчанию, первоначально называвшимся Jet, а теперь переработанным и переименованным в ACE, но есть много уровней на который доступ к платформе разработки может быть полностью отделен от Jet / ACE, ядра базы данных по умолчанию.

В этом случае вы решили использовать серверную часть Jet / ACE, что, вероятно, подойдет для небольших групп пользователей, т. Е. До 25 лет. Jet / ACE также может работать до 50 или 100, особенно когда только несколько одновременных пользователей имеют разрешение на запись. В то время как ограничение в 255 пользователей в Jet / ACE включает пользователей как для чтения, так и для записи, именно количество пользователей для записи действительно определяет, сколько одновременных пользователей вы можете поддерживать, и в вашем случае у вас есть приложение, в основном читающее - только пользователи, так что создать хорошее приложение, не имеющее проблем с серверной частью, не должно быть очень сложно.

В принципе, я думаю, что ваш опыт работы с Oracle, вероятно, приведет вас к неправильному пониманию того, как разрабатывать в Access, где Ожидаемый подход заключается в привязке ваших форм к источникам записей, которые обновляются без необходимости написания кода. Теперь, ради эффективности, неплохо привязать ваши формы к подмножествам записей, а не к целым таблицам, но даже со всей таблицей в источнике записей за формой редактирования данных, Доступ будет достаточно эффективным при редактировании таблиц Jet / ACE (старый миф о перетаскивании всей таблицы по сети все еще существует), пока ваши таблицы данных эффективно индексируются.

Блокировка записи - это то, чего вам в большинстве случаев не следует ' У меня нет причин для беспокойства, и одна из причин этого - связанное редактирование, когда форма всегда знает, что происходит в бэкэнде (ну, с интервалом примерно в секунду, интервал обновления по умолчанию) . То есть это не похоже на веб-страницу, где вы извлекаете копию данных, а затем отправляете свои изменения обратно на сервер в транзакции, полностью не связанной с исходной операцией извлечения данных. В связанной среде, такой как Access, файл блокировки во внутреннем файле данных всегда будет отслеживать тот факт, что кто-то открыл запись для редактирования. Это предотвращает попадание правок пользователя на правки других пользователей, поскольку Access знает состояние и информирует пользователя. Все это происходит без какого-либо кодирования со стороны разработчика и является одним из больших преимуществ модели привязанного редактирования (помимо отсутствия необходимости писать код для публикации изменений).

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

51
ответ дан 28 November 2019 в 18:29
поделиться

Первое, что нужно сделать (если это еще не сделано), - это разделить вашу базу данных на внешний интерфейс (со всеми формами / отчетами и т. Д.) И серверную часть (со всеми данными). Во-вторых, нужно настроить контроль версий во внешнем интерфейсе.

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

• Проверяет, есть ли у пользователя база данных на их диске C

• Если они этого не делают, то устанавливают и запускают

• Если да, то проверьте, какая у них версия

• Если номера версий не совпадают, скопируйте последнюю версию

• Откройте базу данных

Весь процесс проверки обычно занимает менее половины секунды.

4
ответ дан 28 November 2019 в 18:29
поделиться

Думаю, Access - лучший выбор для вашего случая. Но вам нужно разделить базу данных, см.: http://accessblog.net/2005/07/how-to-split-database-into-be-and-fe.html

• Как мы можем убедиться, что пользователь записи может вносить изменения в данные таблицы, в то время как другие пользователи используют данные? Блокируют ли читающие пользователи таблицы? Должен ли пользователь записи накладывать блокировки на стол? Делает ли Access это за нас или мы должны явно кодировать это?

блокировок чтения не существует, если вы не поставите их явно. Просто используйте «Без блокировок»

• Есть ли какие-либо общие проблемы с «транзакциями MS Access», о которых нам следует знать?

не должно быть проблем с 1-2 записывающими пользователями

• Можем ли мы работать с формами , запросы и т. д., пока они используются? Как мы можем «программировать», не мешая пользователям?

Если вы разделите базу данных - тогда нет проблем с работой над дизайном FE.

• Какие настройки в MS Access влияют на то, как обрабатываются вещи?

Что вы имеете в виду?

• Наш опыт в основном связан с Oracle, где Access отличается в работе с несколькими пользователями? Есть ли в Access такое понятие, как «уровни изоляции»?

Нет уровней изоляции в доступе. Кстати, позже вы можете переместить данные в oracle и сохранить доступ к интерфейсу, если у вас много пользователей и большая база данных.

2
ответ дан 28 November 2019 в 18:29
поделиться

Блокировка таблицы или записи доступна в Access во время записи данных. Вы можете управлять блокировкой записей по умолчанию через Инструменты | Опции | Вкладка Advanced:

  1. No Locks
  2. All Records
  3. Edited Record

Вы можете установить это в блокировках записей формы или в вашем коде DAO / ADO для определенных нужд.

Транзакции не должны быть проблема, если вы используете их правильно.

Лучшая практика: отделите свои таблицы от всего остального кода. Дайте каждому пользователю свою копию файла кода, а затем поделитесь файлом данных на сетевом сервере. Работайте над «тестовой» копией кода (и ссылкой на файл тестовых данных), а затем обновите пользователя. s отдельные файлы кода отдельно. Если вам нужно внести изменения в файл данных (добавить таблицы, столбцы и т. Д.), Вам придется заставить всех пользователей выйти из приложения, чтобы внести изменения.

См. Другие ответы для сравнения Oracle.

2
ответ дан 28 November 2019 в 18:29
поделиться

Access - отличная многопользовательская база данных. Он имеет множество встроенных функций для работы в многопользовательской ситуации. На самом деле, она очень популярна, потому что это отличная многопользовательская база данных. Существует верхний предел того, сколько пользователей могут использовать базу данных одновременно, выполняя обновления и редактирование - в зависимости от того, насколько хорошо разработчик осведомлен о доступе и как была спроектирована база данных - от 20 до примерно 50 пользователей. Некоторые базы данных доступа могут быть созданы для обработки до 50 одновременных пользователей, в то время как многие другие могут обрабатывать 20 или 25 одновременных пользователей, обновляющих базу данных. Эти цифры наблюдались для баз данных, которые использовались в течение нескольких или более лет, и много раз обсуждались в группах новостей доступа.

0
ответ дан 28 November 2019 в 18:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: