Авторизация

Рубрики блога


Рекомендуем



Последние комментарии

Облако тегов


Устами великих

"Странный этот мир, где двое смотрят на одно и то же, а видят полностью противоположное." © Агата Кристи

Реклама



MS Office и VBA Рубрика содержит интересные решения, малоизвестные функции и возможности, надстройки и макросы, в общем, все то, что может сделать вашу работу в пакете программ MS Office (в первую очередь - Excel, Word, Access) более эффективной.
17
Авг

Форма входа (MS Access)

рейтинг материал 4.2 (8) | количество просмотров 27168 | количество коментариев 5
Как создать форму выскакивающую при входе, в которой бы была проверка по паролю для пользователя.

Суть в том, что бы создать форму выскакивающую при входе, в которой бы были поле выпадающего списка для выбора сотрудника, поле для ввода пароля и соответственно кнопка "ОК". Но это не просто форма для безопасности. Еще должна быть привязка к должности пользователя. Так, после подтверждения правильности ввода данных, должна открываться форма со множеством подчиненных форм и кнопок на отчеты и запросы, при чем эта форма должна быть разной для каждой должности. Таким образом, получается что будет создан пользовательский интерфейс при этом не закрывая, так сказать, исходный код, но по большому счету, любому пользователю будет незачем просматривать все отчеты, фомы и запросы базы в поисках непонятно чего, так как у него все будет нужно у него перед глазами.

Самое первое что нужно, так это таблица с сотрудниками (или пользователями) со столбцами где указаны их имя, должность и пароль.

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

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

Для MS Access 2003
В окне БД - Сервис->Параметры запуска->Вывод формы/страницы..... Выбирайте, какую форму хотите запускать при открытии БД...
Для MS Access 2007
В окне БД - Сервис->Параметры запуска->Вывод формы/страницы..... Выбирайте, какую форму хотите запускать при открытии БД...

Соответственно для поля выпадающего списка нужно сделать привязку "источника строк" к полям таблицы "Персонал" (ну или пользователи) и выбрать такие поля как ID (уникальный номер для каждого сотрудника), Имя (в нашем случае поле называется ФИО) и Должность

При желании можно также выставить сортировку по интересующему полю, либо по ID, тогда пользователи будут отображаться по мере поступления на работу, можно по Имени, а можно сделать сортировку по должностям.

Далее выделяем кнопку "ОК" в конструкторе и ищем поле в событиях "Нажатие кнопки", выбирая [Процедура обработки событий] переходим в Visual Basic и прописываем следующий сценарий для кнопки, который будет работать по клику:

Private Sub cmdLogin_Click() 'cmdLogin - это имя кнопки для которой пишется сценарий 
Dim rst As DAO.Recordset 

Set rst = CurrentDb.OpenRecordset("Сотрудники") 'Сотрудники - указываем с какой таблицей будет работать сценарий 
 With rst 
 If IsNull(Me.cboCurrentEmployee.Value) Then 'Условие если поле выпадающего списка на момент клика пустое, то 
 MsgBox "Ошибка входа! Выберите пользователя." 
 Exit Sub 
 Else: 
 .FindFirst ("ID=" & Me.cboCurrentEmployee.Value) 'Если поле не пустое, то производится поск на соответствие с данными таблицы Сотрудники 
 If .NoMatch Then ' Если нет совпадений, то 
 MsgBox "Ошибка входа! О данном пользователе нет информации в БД." 
 Exit Sub 
 Else: 
 If Me.Поле_для_пароля.Value <> .Fields("Пароль").Value Then 'Условие для сравнения введенных данных в поле для пароля с колонкой пароль в таблице "Сотрудники" 
 MsgBox "Пароль неправильный или не соответствует имени пользователя" 
 Exit Sub 
 End If 
 If IsNull(Me.Поле_для_пароля.Value) Then ' Условие для ошибки в случае, если поле для пароля не заполненное 
 MsgBox "Вы не ввели пароль!" 
 Exit Sub 
 End If 
 DoCmd.Close 'Команда на закрытие текущей формы, в данном случае формы входа 
 Select Case .Fields("Должность").Value 
 Case "Директор" 
 DoCmd.OpenForm "Партнеры" 
 Case "Координатор по продажам" 
 DoCmd.OpenForm "Накладные" 
 Case "Просто ходит за зарплатой" 
 DoCmd.OpenForm "Форма_для_меня_и_босса" 'отбор по полю должность и команда открытие указаной формы для соответсвующей должности 
End Select 
 End If 
 End If 
 End With 
rst.Close 
Set rst = Nothing 
End Sub 

PS код уже с комментариями относительно его содержания

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

Stitch Не получается. Выдает ошибку, что операция не поддерживается для обьектов этого типа.

Проблемная строка:
.FindFirst ("ID=" & Me.cboCurrentEmployee.Value)

Заранее спасибо
написал(а)
05 Май 2012
в 22:19
0

Stitch Решение найдено! dance dance dance

в 5 строке добавляем dbOpenDynaSet

Private Sub cmdLogin_Click()
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("Сотрудники", dbOpenDynaSet)
With rst
If IsNull(Me.cboCurrentEmployee.Value) Then
MsgBox "Ошибка входа! Выберите пользователя."
Exit Sub
dance
написал(а)
13 Май 2012
в 23:07
0

Reactor Благодарю! Долго искал, как это реализовать, но нашел только здесь. Отдельное спасибо Stitch)
написал(а)
17 Июн 2015
в 14:03
0

agressor1520 Скиньте свой код пожалуйста, выдает ошибки, или лучше бд целиком
написал(а)
12 Дек 2018
в 16:12
0

AleX_X В статье и есть мой код. Не уверен, что база к текущему времени сохранилась, но я посмотрю свои архивы.
написал(а)
13 Дек 2018
в 07:56
0

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]