Формы MS Access только для чтения

У меня есть приложение, разработанное в формах доступа MS, указывающее на базу данных SQL-сервера. Строка подключения на стороне форм использует пользователя БД, который имеет полный доступ к базе данных SQL Server.

Я хочу сделать форму доступа только для чтения или, скажем, не хочу, чтобы какая-либо вставка/обновление/удаление выполнялась на стороне БД.

Есть ли какие-либо настройки, которые я могу использовать, чтобы сделать все меню форм доступа только для чтения? Я попытался установить для параметра формы, например «Разрешить редактирование/разрешить дополнения», значение «Нет», но это не работает.

Пожалуйста помоги.

Спасибо


person Murty    schedule 05.03.2019    source источник
comment
Что вы подразумеваете под всем меню форм доступа? Эти ограничения должны быть установлены в свойствах каждой формы. Что вы имеете в виду под не работает?   -  person June7    schedule 05.03.2019
comment
Лучше и проще полагаться на безопасность SQL Server. Настройте другого пользователя с разрешениями только на чтение данных и используйте его в соединении или, что еще лучше, используйте аутентификацию Windows AD и поместите пользователей в соответствующую группу AD, которая имеет роль только для чтения.   -  person Lord Peter    schedule 06.03.2019
comment
@June17June17 Я пытался выполнить эти настройки для каждой формы, но он по-прежнему позволяет мне изменять и сохранять в базе данных, чего я не хочу. Я хочу запретить пользователю добавлять, изменять базу данных   -  person Murty    schedule 06.03.2019
comment
@LordPeter .. Да, я тоже подумал об этом и запросил пользователя БД SQL-сервера только для чтения. Но не приведет ли предоставление сведений об этом пользователе в строке подключения на уровне форм доступа к какой-либо ошибке на уровне форм?   -  person Murty    schedule 06.03.2019
comment
@LordPeter .. Не могли бы вы рассказать подробнее об аутентификации Windows AD и о том, как она работает? Спасибо..   -  person Murty    schedule 06.03.2019
comment
Вот примечания MS о режимах аутентификации SQL Server: - docs.microsoft.com/en-us/sql/relational-databases/security/   -  person Lord Peter    schedule 06.03.2019


Ответы (3)


Вы можете открыть форму с помощью

DoCmd.OpenForm "myform", DataMode:=acFormReadOnly, ... other required parameters

Кроме того, вы можете установить для свойств Allow Additions, Allow Edits и Allow Deletions значение False для формы и любых подчиненных форм.

person Olivier Jacot-Descombes    schedule 06.03.2019
comment
Я не хотел менять какой-либо код на стороне VBA, поэтому помогли изменения настроек. - person Murty; 07.03.2019

ИМО, лучший и самый простой способ — установить для формы RecordsetType значение Snapshot вместо значения по умолчанию Dynaset.

Он предотвращает любые вставки/обновления/удаления связанных данных, но позволяет вводить данные в несвязанные элементы управления, например. поля поиска.

person Andre    schedule 06.03.2019

У вас есть несколько вариантов.

На странице свойств формы, вкладка данных, установите разрешить редактирование = Нет.

Создайте представление на сервере sql для таблицы — связанные представления НЕ обновляются, если вы не выберете PK в процессе связывания. Таким образом, связанное представление доступно только для чтения.

Создайте сквозной запрос. И основывайте форму на этом сквозном запросе. Все запросы PT доступны только для чтения.

Таким образом, выше приведены 3 варианта, которые не требуют от вас изменения или настройки разрешений на стороне сервера.

person Albert D. Kallal    schedule 06.03.2019
comment
Спасибо, я попробовал ваш первый вариант, он хорош, 2-й и 3-й имеют некоторые изменения в коде, но тоже работают.. спасибо - person Murty; 07.03.2019