Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Установить режим чтения.
 
 автор: seluvan   (08.01.2013 в 17:44)   личное сообщение
 
 

Доброго дня Всем!
Подскажите мне, как при виборе определённого пользователя устанить для базы режим чтения (можно только для форм).
Не получается пока.

  Ответить  
 
 автор: snipe   (09.01.2013 в 09:28)   личное сообщение
 
 

у формы есть свойства
на вкладке данные
ввод данных
разрешить добавление
разрешить удаление
разрешить изменение

если их поставить в значение нет - то, я так понимаю, что, данные удастся только прочитать

  Ответить  
 
 автор: Дядя Федор   (09.01.2013 в 11:22)   личное сообщение
 
 

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

  Ответить  
 
 автор: seluvan   (09.01.2013 в 12:29)   личное сообщение
 
 

Опишу подробнее.
Есть форма на авторизацию, есть два пользователя "админ" и "гость".
Хочу чтобы когда вибираю "гость", прошла процедура проверки и закрила все формы для редактирования, т.е. программно пробежаться и закрыть. Никак не могу понять, как именно программно без громоздкого кода перечесления всех форм и установки стойства "добавление" = false обойтись. Считиваю все формы Application.CurrentProject.AllForms.Count -1, система видит их))) по другому не может бить, но как потом их закрить((( Может бить у самого проекта есть свойства, к примеру "только чтение"... Заранее спс

  Ответить  
 
 автор: Дядя Федор   (09.01.2013 в 13:23)   личное сообщение
 
 

Открыть 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




Но вообще-то подход "закрыть все для редактирования " порочный.
А если потом возникнет потребность разграничения прав по формам?

  Ответить  
 
 автор: seluvan   (09.01.2013 в 13:27)   личное сообщение
 
 

да база маленькая, для себя делалась. думаю в ближайшее время разделения прав мне не светит. Дядя Федор спс. Сейчас попробую.

  Ответить  
 
 автор: seluvan   (09.01.2013 в 13:35)   личное сообщение
 
 

акс дохнет)))) откривает...закривает....дохнет

  Ответить  
 
 автор: snipe   (09.01.2013 в 13:58)   личное сообщение
 
 

Форму авторизации скройте (вместо закрытия формы - установите свойство формы 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("Первая форма")

  Ответить  
 
 автор: Дядя Федор   (09.01.2013 в 15:34)   личное сообщение
 
 

Я ж говорю путь порочный.
Snipe дело предложил.
А можно просто записать IdUsr в табличку.
И проверять на открытие формы.
Наподобие, Как в третьем сабже.

  Ответить  
 
 автор: seluvan   (09.01.2013 в 15:42)   личное сообщение
 
 



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("Первая форма")



вот этот код мне нравиться. простенький и отрабативается корректно.

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList