#database #ms-access
#База данных #ms-access
Вопрос:
У меня есть приложение, разработанное в MS access forms, указывающее на базу данных SQL Server. Строка подключения на стороне форм использует пользователя базы данных, который имеет полный доступ к базе данных SQL Server.
Я хочу сделать форму доступа доступной только для чтения или, скажем, не хочет, чтобы какие-либо вставки / обновления / удаления выполнялись на стороне базы данных.
Есть ли какие-либо настройки, которые я могу использовать, чтобы сделать все меню Access forms доступным только для чтения? Я попытался установить для параметров форм, таких как Разрешить редактирование / Разрешить добавления, значение «Нет», но это не работает.
Пожалуйста, помогите.
Спасибо
Комментарии:
1. Что вы подразумеваете под «полным меню форм доступа»? Для этих ограничений должны быть установлены свойства каждой формы. Что вы подразумеваете под «не работает»?
2. Лучше и проще полагаться на безопасность SQL Server. Настройте другого пользователя с правами доступа к данным только на чтение и используйте это при подключении или, что еще лучше, используйте проверку подлинности Windows AD и поместите пользователей в соответствующую группу AD, у которой есть роль только для чтения.
3. @June17 Я пытался выполнить эти настройки для всех форм, но это все еще позволяет мне изменять и сохранять в базе данных, которую я не хочу. Я хочу ограничить пользователя от добавления, изменения в базу данных
4. @LordPeter.. Да, я тоже думал об этом и запросил пользователя базы данных SQL Server только для чтения. Но не приведет ли предоставление сведений об этом пользователе в строке подключения на уровне форм Access к какой-либо ошибке на уровне форм?
5. @LordPeter.. Не могли бы вы более подробно рассказать об аутентификации Windows AD и о том, как это работает? Спасибо..
Ответ №1:
IMO лучший и простой способ — установить для формы RecordsetType
значение Snapshot вместо Dynaset по умолчанию.
Это предотвращает любые вставки / обновления / удаления связанных данных, но позволяет вводить данные в несвязанные элементы управления, например, поля поиска.
Ответ №2:
Вы можете открыть форму с
DoCmd.OpenForm "myform", DataMode:=acFormReadOnly, ... other required parameters
Кроме того, вы можете задать для Allow Additions
, Allow Edits
и Allow Deletions
свойств значение False
для формы и любых вложенных форм.
Комментарии:
1. Я не хотел изменять какой-либо код на стороне VBA, поэтому изменения настроек помогли.
Ответ №3:
У вас есть несколько вариантов.
На странице свойств форм, вкладка данные, установите разрешить редактирование = Нет.
Создайте представление на sql server для связанных с таблицей представлений, которые невозможно обновить, если вы не выберете PK в процессе компоновки. Таким образом, связанное представление доступно только для чтения.
Создайте сквозной запрос. И создайте форму на основе этого запроса с передачей. Все запросы PT доступны только для чтения.
Итак, выше приведены 3 варианта, которые не требуют от вас изменения или настройки разрешений на стороне сервера.
Комментарии:
1. Спасибо, я попробовал ваш первый вариант хорош, второй и третий имеют некоторые изменения в коде, но тоже работают.. Спасибо