Rambler's Top100
Российский фонд помощи
Навигация
Главная
MS ACCESS
VB
ASP
PHP
Наши друзья
Поиск
Форум
Лента новостей
Новый сайт

Online
Рассылки Subscribe.Ru
Работа с MS Access
Подписаться письмом
Реклама на сайте
 
Главная arrow MS ACCESS arrow Простая авторизация средствами ACCESS
Простая авторизация средствами ACCESS Печать E-mail
Автор Час   
30.05.2008 г.
Оглавление
Простая авторизация средствами ACCESS
Страница 2
Так, как обычно вход в программу начинается с окошечка введите пароль - это и будет нашим началом....
Рассмотрим простой пример авторизации входящего в программу пользователя, с применением вышесказанного.
Пароль входа и права входящего будут размещены в таблице "Пароль".

В среде MS Access все данные хранятся в таблицах.
Это удобно. В созданных Вами таблицах могут храниться так же данные об объектах базы (параметры форм, параметры размещённых на форме элементов и прочее, прочее, прочее). Вместо использования в программе переменных для хранения значений, можно воспользоваться таблицами.
В таком случае при выключении компьютера все значения не будут потеряны, и можно
не заботиться о присвоении значений переменным (например "глобальным").


Так, как обычно вход в программу начинается с окошечка введите пароль - это и будет нашим началом....
Рассмотрим простой пример авторизации входящего в программу пользователя, с применением вышесказанного.
Файл, в котором находится все что описано ниже, можно взять здесь: Download now
Пароль входа и права входящего будут размещены в таблице "Пароль".
У неё имеется одно единственное поле: Значение - значение пароля в "зашифрованном" виде.
Для того, что бы иметь возможность считать данные из ячейки таблицы создадим функцию.
В нашем распоряжении встроенная функция, которая даёт первое значение из поля таблицы:

 

DFirst("[MyFieldName]", "MyTablename", "MyCriteria")

Иными словами DFirst -найти первое значение, в поле "[Значение]", таблицы "Пароль", удовлетворяющее критерию отбора.
Критерий поиска в нашем случае будет отсутствовать, мы считаем первое и единственное значение.
DFirst("Значение", "Пароль")
Так как у нас пароль "зашифрован", а именно - имеется длинная строка, внутри которой находятся 5 символов (АДМИН) и четыре символа (ЮЗЕР). Слова написаны так:
слово АДМИН - КОЛЮЗВЕРЬК(АД)ЫК(МИН)АПОПКАНОС
слово ЮЗЕР - КОЛ(ЮЗ)В(ЕР)ЬКАДЫКМИНАПОПКАНОС
Можно было бы конечно просто написать все символы алфавита и выбрать из них нужные, но для начала попробуем так....
Что бы в длинной строке найти нужные нам символы имеется замечательная функция для работы со строками (строковыми переменными) - функция MID.
Mid(String,Start,[Length])
String - Строковое выражение, в котором ведется поиск. (КОЛЮЗВЕРЬКАДЫКМИНАПОПКАНОС).
Start - с какого по счёту символа начать поиск - например, с четвёртого.
Length - сколько символов вырезать.
Почитайте о ней по ссылке: http://hiprog.com/index.php?option=com_content&task=view&id=271&Itemid=35


Итак, в поле "ввода пароля" введён пароль и нажата клавиша Enter. Теперь попробуем проверить правильно ли введён пароль.
Для наглядности создадим две переменные:

Dim Какие_права As String
Dim Какой_пароль As String

Для начала зададим этим переменным значение = пустая строка:
Какие_права = ""
Какой_пароль = ""

Считаем из таблицы пароль значение пароля в "зашифрованном" виде.
Какой_пароль = DFirst("Значение", "Пароль")
Получим:
Какой_пароль = КОЛЮЗВЕРЬКАДЫКМИНАПОПКАНОС
Вырежем из этой строки два кусочка:
Первый кусочек Mid(Какой_пароль, 4, 2) начиная с четвёртого символа, вырежем два символа получим = ЮЗ
Первый кусочек Mid(Какой_пароль, 7, 2) начиная с четвёртого символа, вырежем два символа получим = ЕР
Если сложить - получим ЮЗЕР - это пароль входа в систему рядового пользователя, хотя Вы понимаете,
что пароль мог быть и совершенно другим.

Теперь если написать строку
MsgBox Mid(Какой_пароль, 4, 2) & Mid(Какой_пароль, 7, 2) = Nz(Me!Поле3)
на экране появиться сообщение с надписью ЮЗЕР.

Можем смело писать:
Если сложение двух кусочков равно тому, что введено в поле ввода пароля, значит
в программу входит рядовой пользователь.

If Mid(Какой_пароль, 4, 2) & Mid(Какой_пароль, 7, 2) = Nz(Me!Поле3) Then
Какие_права = "Пользователь"
End If

А если результат сложения кусочков даёт АДМИН...

If Mid(Какой_пароль, 11, 2) & Mid(Какой_пароль, 15, 3) = Nz(Me!Поле3) Then
Какие_права = "Администратор"
End If

Далее проверяем значение переменной, - "Какие_права"
Если Какие_права не равны пустому значению тогда сообщаем (сообщаем только для наглядности) какие права у входящего.

If Какие_права <> "" Then MsgBox "Вы входите в программу с правами - " & Какие_права

если же (Какие_права = "") тогда выходим из приложения. Так как выход осуществляется, у нас по нажатию кнопки Кнопка26_Click, мы просто переведём программу в событие Кнопка26_Click. Хотя можем написать просто
DoCmd.Quit , что так же приведёт к выходу из приложения.

Далее у нас идут две команды:

DoCmd.Close acForm, Me.Name - Закрытие формы "KTO" - записано Me.Name это что-то вроде Я.имя...(моё.имя)

DoCmd.OpenForm "Новый_Пароль" - открытие формы "Новый_Пароль"(это вторая форма в нашем примере.)


Переходим к форме, в которой мы запросим новые значения паролей и внесём изменения в таблицу.
Для записи новых данных в таблицу нам понадобиться функция записи в таблицу:

Function Zapis_v_Tablici(Strtbl As String, StrField As String, Znachenie As String, StrCritery As String)

'Первая строка это как заголовок функции, где:

'Strtbl - имя таблицы, StrField - имя поля в таблице, Znachenie Заносимое значение
'StrCritery Критерий (поле условие), идентификатор или просто "" (пустая строка)
'Далее объявляем переменную MyRst

Dim MyRst As DAO.Recordset 'Объект Recordset представляет набор записей таблицы (пока пустой набор)

'далее обработка ошибочных ситуаций

On Error GoTo Zapis_v_Tablici_Error ' Если вдруг какая ошибка, идти к метке (Zapis_v_Tablici_Error:)внизу кода
'-------------------------------------------------------------------------------

Set MyRst = CurrentDb.OpenRecordset(Strtbl, dbOpenDynaset) ' Присвоим пустому набору конкретую таблицу(источник строк)
' CurrentDb - текущая база
'OpenRecordset - открыть набор записей
'Strtbl - источник записей наша таблица "пароль"

'dbOpenDynaset - открыть как динамический набор
With MyRst 'блок работы с нашим набором
.MoveFirst 'переход на первую запись

If StrCritery = "" Then GoTo Bez_StrCritery ' Если критерий не задан - его и не проверяем
.FindFirst StrCritery 'поиск критерия
Bez_StrCritery:

If Not MyRst.NoMatch Then 'Условие Если искомое найдено тогда .....
.Edit ' редактируем запись
.Fields(StrField) = Znachenie '.Fields(NameField) = заносим значение
.Update ' Обновим данные
End If ' конец выполнения условия
End With ' конец блока работы с нашим набором
MyRst.Close 'закрыть Объект Recordset
Set MyRst = Nothing ' очистить переменную MyRst

'-------------------------------------------------------------------------------

On Error GoTo 0
Exit Function
Zapis_v_Tablici_Error:
Call MsgBox("Функция ->" & "Zapis_v_Tablici", Err.Number, Err.Description)

End Function

Эту функцию расположим в модуле. Модули программы располагаются на последней вкладке окна базы данных. Там создадим новый - пустой модуль. И вставим в него нашу функцию - она будет доступна из всех форм, из всех запросов,
из любой точки кода базы.
Что бы воспользоваться объектной моделью DAO необходимо создать ссылку.....
Это делается следующим образом - пока мы находимся в открытом модуле наверху - в меню найдём кнопку Tools (клик по ней) далее клик по References... далее ищем в списке Microsoft DAO 3.6 Object Library и ставим (слева) галочку. Нажимаем ОК.


Итак, вторая форма нашей программы (Новый_пароль).
Она у нас, как следует из её названия, для ввода новых значений паролей.
После ввода новых значений и нажатия кнопки "Запомнить пароли" производим проверку введенных данных.

If Nz(Me!Администратор) = "" And Nz(Me!Пользователь) = "" Then ' проверка введены ли значения в поля Администратор и Пользователь
MsgBox "Изменений пароля не произведено! " ' если нет ни одного значения
Exit Sub ' если нет ни одного значения выход из события (нажатие кнопки).
End If

If Nz(Me!Пользователь) <> "" Then
'Формирование пароля Пользователь и добавление его в строку паролей Какой_пароль =
Left(Какой_пароль, 3) - слева три символа из строки паролей
Mid(Me!Пользователь, 1, 2) - два символа из поля Пользователь на форме
Mid(Какой_пароль, 6, 1) - один символ из строки паролей, начиная с 6 позиции
Mid(Me!Пользователь, 3, 2) - два символа из поля Пользователь на форме
Mid(Какой_пароль, 8) - все символы из строки паролей начиная с восьмого и до конца строки
End If

Далее аналогично формируем строку паролей, добавляя в неё значение пароля Администратора.....

If Nz(Me!Администратор) <> "" Then
'Формирование пароля Администратор и добавление его в строку паролей
Какой_пароль = Left(Какой_пароль, 11) & Mid(Me!Администратор, 1, 2) & Mid(Какой_пароль, 14, 2) & Mid(Me!Администратор, 3, 3) & Mid(Какой_пароль, 18)
End If

В итоге мы получаем сформированную новую строку паролей.
Чтобы все буквы в строке паролей были одной высоты используем встроенную функцию: "UCase"

Какой_пароль = UCase(Какой_пароль) 'ДЕЛАЕМ ВСЕ БУКВЫ ЗАГЛАВНЫМИ ....... КАКОЙ_ПАРОЛЬ

С помощью нашей функции записи новых данных в таблицу занесём новые пароли .

Call Zapis_v_Tablici("Пароли", "Значение", Какой_пароль, "") ' Запись новой строки паролей в таблицу.


Вот вкратце и всё........

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



Пример можно взять здесь: Download now
Данный пример предназначен исключительно для ознакомления с методами работы в ACCESS, и не может быть использован для защиты реального приложения.

Успехов!!!

 

Тема получила свое продолжение в статье Авторизация средствами ACCESS часть 2.


Просмотров: 24720

  Коментарии (13)
 1 Написал(а) Аня, в 07:13 03.06.2008
Огромное спасибо, что выложили на сайт такую информацию! 
Я сейчас делаю курсовой, и она была мне просто необходима. Думала голову сломаю, пока придумаю, как это все реализовать. Теперь мне будет намного легче. 
Еще раз огромное спасибо! :)
 2 Написал(а) час, в 13:31 03.06.2008
Поправочка: Права пользователей вычисляются программно. 
Т.Е. в табличке их нет. 
В табличке несколько десятков строк может быть с наборами абры-кадабры.
 3 Написал(а) час, в 07:50 04.06.2008
Ура!!!! Заработало.......... 
Хорошо, что есть отзывчивые люди, коменты пишут. 
А то в безведении нахожусь - нужно это кому или нет? 
Смотреть смотрят, а ни ругани ни похвалынету............
 4 Написал(а) MIGht, в 08:05 06.08.2008
Отличная штука. 
А на 2007 access будет работать?
 5 Написал(а) час, в 11:55 14.08.2008
:? Не пробовал... 
Хотя всё упрощено до максимума... 
Без библиотек, без внешних файлов.... 
Так что видимо проблем не будет...
 6 Написал(а) час, в 08:01 15.08.2008
На 2007 не пробовал, но препятствий не видно....
 7 Написал(а) пожилая программистка, в 20:22 13.10.2008
Большое человеческое спасибо. Все очень понятно, буду использовать в деле.
 8 Написал(а) час, в 17:09 02.11.2008
:grin  
Ник у Вас обалденный........
 9 Написал(а) Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script , в 12:32 20.11.2008
Скажите пожалуйста, с паролем вроде разобрался, а как установить разграничение прав админа и юзера? заранее благодарю! )))) :?
 10 Написал(а) Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script , в 19:39 20.11.2008
Помогите пожалуйста, программа хорошая, только не могу разобратся, как в эту программу прописать права??? заранее благодарю!


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