|
|
|
| Доброго дня Всем!
Подскажите мне, как при виборе определённого пользователя устанить для базы режим чтения (можно только для форм).
Не получается пока. | |
|
| |
|
|
|
| у формы есть свойства
на вкладке данные
ввод данных
разрешить добавление
разрешить удаление
разрешить изменение
если их поставить в значение нет - то, я так понимаю, что, данные удастся только прочитать | |
|
| |
|
|
|
| DoCmd.OpenForm "frm1", , , , acFormReadOnly
А вообще способов много.
Например, на отркытие пробежаться по всем полям и задать Locked=true
Или задать Me.RecordsetType = 2
Из хелпа:
Sub Form_Open(Cancel As Integer)
Const conSnapshot = 2
If gstrUserID <> "ADMIN" Then 'Если юзер админ (можно проверять другое усдовияе)
Forms!Employees.RecordsetType = conSnapshot
End If
End Sub | |
|
| |
|
|
|
| Опишу подробнее.
Есть форма на авторизацию, есть два пользователя "админ" и "гость".
Хочу чтобы когда вибираю "гость", прошла процедура проверки и закрила все формы для редактирования, т.е. программно пробежаться и закрыть. Никак не могу понять, как именно программно без громоздкого кода перечесления всех форм и установки стойства "добавление" = false обойтись. Считиваю все формы Application.CurrentProject.AllForms.Count -1, система видит их))) по другому не может бить, но как потом их закрить((( Может бить у самого проекта есть свойства, к примеру "только чтение"... Заранее спс
| |
|
| |
|
|
|
| Открыть acViewDesign. Потом закрыть.
Что-то вроде
Public Sub AllFrormsRecordType()
Dim obj As AccessObject, dbs As Object
Dim k%
k = 0
Set dbs = Application.CurrentProject
For Each obj In dbs.AllForms
k = k + 1
Debug.Print k, obj.Name
DoCmd.OpenForm obj.Name, acViewDesign, , , acHidden
With Forms(obj.Name)
On Error Resume Next
Forms(obj.Name).RecordsetType = 0 '2 - для запрета редактирования
DoCmd.Close acForm, obj.Name, acSaveYes
End With
Next obj
MsgBox Now(), , "Всего форм в базе " & k
End Sub
|
Но вообще-то подход "закрыть все для редактирования " порочный.
А если потом возникнет потребность разграничения прав по формам? | |
|
| |
|
|
|
| да база маленькая, для себя делалась. думаю в ближайшее время разделения прав мне не светит. Дядя Федор спс. Сейчас попробую. | |
|
| |
|
|
|
| акс дохнет)))) откривает...закривает....дохнет | |
|
| |
|
|
|
| Форму авторизации скройте (вместо закрытия формы - установите свойство формы visible=false)
а при запуске формы спрашивайте поле формы - кто выбран
и в зависимости от того кто юзает базу ........
Public function Open_form(asd as string)
if forms![Авторизация]![ПолеЮзера]="админ" then
DoCmd.OpenForm asd
else
DoCmd.OpenForm asd", , , , acFormReadOnly
end if
end function
вызов
call Open_form("Первая форма") | |
|
| |
|
|
|
| Я ж говорю путь порочный.
Snipe дело предложил.
А можно просто записать IdUsr в табличку.
И проверять на открытие формы.
Наподобие, Как в третьем сабже. | |
|
| |
|
|
|
|
Public function Open_form(asd as string)
if forms![Авторизация]![ПолеЮзера]="админ" then
DoCmd.OpenForm asd
else
DoCmd.OpenForm asd", , , , acFormReadOnly
end if
end function
вызов
call Open_form("Первая форма")
|
вот этот код мне нравиться. простенький и отрабативается корректно. | |
|
| |