powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Форма входа
25 сообщений из 85, страница 1 из 4
Форма входа
    #37392302
AleX_X89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В шаблонной базе данных Борей, есть форма которая меня заинтересовала - "Окно входа"
Суть ее в том что она выскакивает при входе в базу данных и предлагает из списка сотрудников выбрать от имени кого зайти. При чем, для разных людей, из-за должности которую они занимают и очевидно для их потребностей, после подтверждения в форме "Окно входа" выскакивает новая форма состоящая из нескольких связанных подчиненных форм, и опять таки для разных людей из списка выскакивает разная информация.

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

Для реализации задуманного я понимаю, что мне не достаточно просто конструктора, а полностью синтаксис SQL я еще не изучил, а что-то просто еще не знаю, поэтому не понимаю некоторые вопросы, которые перечислю ниже.

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

2. Как связать выпадающий список пользователей, которые берет список полей из таблицы "Пользователи" с текстовым полем для пароля, который должен совпадать с выбранным пользователем? На сколько я понимаю, связь опять таки должна осуществляться через таблицы и их ключевое поле айди пользователя, а прописываться это должно по идее в каком-то из способов обработки событий для кнопки "ОК".

3. Ну и наконец, чтобы для пользователя с такой-то должностью открывалась такая-то форма. Опять таки на сколько я понимаю это должно прописываться в обработчике событий кнопки "ОК"

Собственно, что именно надо прописать и может быть дадите еще пару каких-то советов по теме. Заранее спасибо.
...
Рейтинг: 0 / 0
Форма входа
    #37392320
WRX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WRX
Гость
AleX_X89, вот то, что Вам нужно - изучите Разграничение прав доступа
...
Рейтинг: 0 / 0
Форма входа
    #37392455
AleX_X89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WRX, это несколько не то что я спрашивал. Я задал конкретные вопросы в которых бы мне хотелось разобраться. Хотя чтиво которое вы предоставили, меня тоже заинтересовало, за что и спасибо :)
Но в целом, вопрос остается открытым.
...
Рейтинг: 0 / 0
Форма входа
    #37392566
Фотография Wipeout2097
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AleX_X89,

Задачка, конечно, интересная... Но вот пара вопросиков: а что произойдет, если вдруг в таблице, в которой содержатся данные о сотрудниках вдруг исчезнут записи? Или сама таблица накроется? Или если возникнет необходимость запустить БД сотруднику, информации о котором в таблицах БД нет? Как тогда будет возможно осуществить вход?
Чем Вас не устраивают штатные возможности Аксесса? На крайний случай можно всегда замутить привязку, сделав поле "Имя_для_пользователя" в таблице "Сотрудники"...
P.S. просто я тоже в свое время мудрил, мудрил, пока понял, что не стоит изобретать велосипед. Штатная защита вполне для этого годится...;)
...
Рейтинг: 0 / 0
Форма входа
    #37392575
Фотография Wipeout2097
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AleX_X89В шаблонной базе данных Борей, есть форма которая меня заинтересовала - "Окно входа"


В окне БД - Сервис->Параметры запуска->Вывод формы/страницы..... Выбирайте, какую форму хотите запускать при открытии БД...
...
Рейтинг: 0 / 0
Форма входа
    #37392616
Фотография Wipeout2097
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AleX_X892. Как связать выпадающий список пользователей, которые берет список полей из таблицы "Пользователи" с текстовым полем для пароля, который должен совпадать с выбранным пользователем? На сколько я понимаю, связь опять таки должна осуществляться через таблицы и их ключевое поле айди пользователя, а прописываться это должно по идее в каком-то из способов обработки событий для кнопки "ОК".


Ну вот, как-то так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Private Sub CommandButton1_Click ()
Dim rst As DAO.Recordset

Set rst = CurrentDb.OpenRecordSet("Таблица_с_пользователями")
      With rst
                 .FindFirst("ID=" & Me.ID.Value)
                 If .NoMach Then
                       MsgBox "Ошибка входа! О данном пользователе нет информации в БД."
                       Exit Sub
                 Else
                     If Me.Поле_на_форме_для_ввода_пароля.Value <> .Fields("Поле_с_паролем_в_таблице_Пользователи").Value Then
                         MsgBox "Пароль не правильный или несоответствует имени пользователя"
                          Exit Sub
                     End If
                     'Вот здесь пишете, что душе угодно: открывайте форму главного меню, приветствия и т.д.
                 End If
      End With
rst.Close
Set rst = Nothing
End Sub
...
Рейтинг: 0 / 0
Форма входа
    #37392648
Фотография Wipeout2097
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AleX_X893. Ну и наконец, чтобы для пользователя с такой-то должностью открывалась такая-то форма. Опять таки на сколько я понимаю это должно прописываться в обработчике событий кнопки "ОК"


Там где я сказал, прописывать "все что душе угодно":

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Select Case .Fields("Должность").Value 'Естественно поле "Должность" должно быть в таб. "Пользователи"
         Case "Старший сантехник"
                 DoCmd.OpenForm "Форма_для_сантехников"
         Case "Младший помощник старшего сантехника"
                 DoCmd.OpenForm "Форма_для_младших_помощников_старших_сантехников"
         Case "Просто ходит за зарплатой"
                 DoCmd.OpenForm "Форма_для_меня_и_босса"
         ......
         ......
         ......
End Select
...
Рейтинг: 0 / 0
Форма входа
    #37392653
AleX_X89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wipeout2097Задачка, конечно, интересная... Но вот пара вопросиков: а что произойдет, если вдруг в таблице, в которой содержатся данные о сотрудниках вдруг исчезнут записи? Или сама таблица накроется? Или если возникнет необходимость запустить БД сотруднику, информации о котором в таблицах БД нет? Как тогда будет возможно осуществить вход?
Чем Вас не устраивают штатные возможности Аксесса? На крайний случай можно всегда замутить привязку, сделав поле "Имя_для_пользователя" в таблице "Сотрудники"...
P.S. просто я тоже в свое время мудрил, мудрил, пока понял, что не стоит изобретать велосипед. Штатная защита вполне для этого годится...;)

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

Кроме того я не хочу создавать ограничение прав для юзеров. Я хочу нечто другое...

Хочу создать разделенные формы с подчиненными формами для каждой группы работников, в каждую из форм вставить все что нужно: ссылки и кнопки на требуемые отчеты и формы для работы той или иной должностной группы пользователей. Таким образом получается что я создам пользовательский интерфейс при этом не закрывая так сказать исходный код, но по большому счету любому пользователю будет незачем просматривать все отчеты, фомы и запросы базы в поисках непонятно чего, так как у него все будет нужно у него перед глазами.
...
Рейтинг: 0 / 0
Форма входа
    #37392679
ё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ё
Гость
AleX_X892. Как связать выпадающий список пользователей, которые берет список полей из таблицы "Пользователи" с текстовым полем для пароля, который должен совпадать с выбранным пользователем? На сколько я понимаю, связь опять таки должна осуществляться через таблицы и их ключевое поле айди пользователя, а прописываться это должно по идее в каком-то из способов обработки событий для кнопки "ОК".

3. Ну и наконец, чтобы для пользователя с такой-то должностью открывалась такая-то форма. Опять таки на сколько я понимаю это должно прописываться в обработчике событий кнопки "ОК"

ничего ни с чем связывать не нужно,
нужно по клику ОК попытатся выбрать должность по введённым Логин и Пароль
если выборка вернёт запись - значит фиксируете где-то Логин пользователя и его Должность
перестраиваете меню под эту должность и открываете форму для этой должности
типа так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
strSQL = "select Должность from Tab where id=" & СписокЛогинов & " and " password='" & ПолеПароль & "'"
rs.Open strSQL, CurrentProject.connection
if rs.Eof Then
  ' Пароль ошибочный
else
  ' Пароль правильный
  Должность = rs.fields(0)
  docmd.close acform, Me.Name
  select case Должность 
    case 1
      docmd.openform "Form1"
    case 2
      docmd.openform "Form2"
    ' ....
  end select
end if
...
Рейтинг: 0 / 0
Форма входа
    #37392691
AleX_X89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wipeout2097В окне БД - Сервис->Параметры запуска->Вывод формы/страницы..... Выбирайте, какую форму хотите запускать при открытии БД...

Спасибо) Разобрался с этим. У кого MS Access 2007, Кнопка "Оффис"/ Параметры Access / Текущая база данных / Форма просмотра (выбрать из списка)
...
Рейтинг: 0 / 0
Форма входа
    #37392767
AleX_X89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо, буду пробовать оба варианта. Позже отпишусь получилось или нет.
ПС. если будут еще какие-то советы, то был бы рад их выслушать.
...
Рейтинг: 0 / 0
Форма входа
    #37398312
AleX_X89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
.FindFirst ("ID=" & Me.ID.Value)

Wipeout2097, можно подробнее обьяснить синтаксис этой строчки, так как на ней выдает ошибку. Что мы ищем?)
...
Рейтинг: 0 / 0
Форма входа
    #37398325
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
AleX_X89выдает ошибку
Какую???
...
Рейтинг: 0 / 0
Форма входа
    #37398349
AleX_X89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wipeout2097, разобрался со всем. Спасибо большое! :)
...
Рейтинг: 0 / 0
Форма входа
    #37398363
AleX_X89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч,
авторMethod or data member not found
С этим разобрался) просто нужно было указать название выпадающего поля вместо ID в строчке

Код: plaintext
.FindFirst ("ID=" & Me.Название_выпадающего_списка_в_форме.Value)

Еще один момент... все работает в смысле идет отбор и по пользователям и по паролю, а также открывает форму для выбраного пользователя при условии такой-то должности, но есть небольшой казус... форма входа остается открытой после клика по кнопке "ОК" и открытия нужной формы.
Очевидно нужна строчка с прописью закрытия формы...
...
Рейтинг: 0 / 0
Форма входа
    #37398367
ё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ё
Гость
AleX_X89...
Еще один момент... все работает в смысле идет отбор и по пользователям и по паролю, а также открывает форму для выбраного пользователя при условии такой-то должности, но есть небольшой казус... форма входа остается открытой после клика по кнопке "ОК" и открытия нужной формы.
Очевидно нужна строчка с прописью закрытия формы...
11109675
9-тая снизу
...
Рейтинг: 0 / 0
Форма входа
    #37399050
AleX_X89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ё9-тая снизу

Код: plaintext
  docmd.close acform, Me.Name
На сколько я понимаю Name это имя формы, хоть если чесно я думал что
Код: plaintext
Me.
служит как обозначения обьектов открытой к примеру формы...
Ну в общем, банальность, но при имени формы Welcome
не работает ни первый вариант

Код: plaintext
DoCmd.Close acForm, Me.Form_Welcome

ни второй

Код: plaintext
DoCmd.Close acForm, Me.Welcome

при выполнении скрипта, пишет что обьект не найден


Погуглил немного и нашел как бы фак по случаю
http://am.rusimport.ru/msaccess/topic.aspx?ID=728

там выложено три разных варианта прописи в VB

При чем выскакивает та же проблема, хоть и ошибка уже другая, в варианте 2 и 3, то есть соответсвенно:
Код: plaintext
 DoCmd.Close acForm, MyForm.Name
Код: plaintext
 DoCmd.Close acForm, MyForm.Name, acSaveYes
ошибка выскакивает
Run-time error "424"
object required

Помог только первый вариант:
Код: plaintext
DoCmd.Close ' закрывает активный объект
Но при этом его понятное дело нужно ставить до отбора по должностям и приказа на запуск соответсвующей формы, иначе моментально закрывает только что открытую форму, а форма входа остается открытой и визуально получается что абсолютно ничего не происходит по клику кнопки "ОК"
...
Рейтинг: 0 / 0
Форма входа
    #37399054
AleX_X89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть. вопрос заключается в том как правильно определить имя формы и как нужно прописывать это в способах по закрытию формы которые возможны но у меня почему-то не получились.
...
Рейтинг: 0 / 0
Форма входа
    #37399057
askerli
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
DoCmd.Close acForm, "Form_Welcome"
пойдет?
...
Рейтинг: 0 / 0
Форма входа
    #37399079
AleX_X89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
askerli, отобраную форму по должности открывает, но текущую, а именно форму входа не закрывает. То есть все так словно этой строчки вообще нет.
...
Рейтинг: 0 / 0
Форма входа
    #37399101
askerli
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотя если форма называется Welcome
Код: plaintext
DoCmd.Close acForm, "Welcome"
...
Рейтинг: 0 / 0
Форма входа
    #37399184
AleX_X89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем в целом что у меня получилось:



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
Private Sub cmdLogin_Click()
Dim rst As DAO.Recordset

Set rst = CurrentDb.OpenRecordset("Сотрудники")
      With rst
                 .FindFirst ("ID=" & Me.cboCurrentEmployee.Value)
                 If .NoMatch Then
                       MsgBox "Ошибка входа! О данном пользователе нет информации в БД."
                       Exit Sub
                 Else:
                     If Me.Поле_для_пароля.Value <> .Fields("Пароль").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 With
rst.Close
Set rst = Nothing
End Sub

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

1. Если оставить все поля пусты и сразу же нажать кнопку "ОК", то просто выскакивает ошибка
Run-time error '3077'
Ошибка синтаксиса, пропущен оператор в выражении.
Было бы неплохо, чтобы выскакивало сообщение которое бы еще раз обьяснило пользователю, что нужно выбрать пользователя из списка и ввести пароль. Иначе он может открыть VB и случайно что-то "исправить" в сценарии кнопки, хотелось бы избежать этого.

2. Если выбираешь кого-то из списка и нажимаешь кнопку "Ок" избегая ввода пароля, то все успешно происходит дальше, так словно пароль и вовсе тут не при чем, а конкретно закрывается текущая форма и открывается та, которая привязана к должности. Ну если честно то по логике скрипта все понятно, собака зарыта в операторе "else".

Кто и что предложит чтобы избежать этих промахов? Заранее спасибо.
...
Рейтинг: 0 / 0
Форма входа
    #37399191
AleX_X89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
askerliхотя если форма называется Welcome
Код: plaintext
DoCmd.Close acForm, "Welcome"


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

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
Private Sub cmdLogin_Click()
Dim rst As DAO.Recordset

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

Код: plaintext
  docmd.close acform, Me.Name
На сколько я понимаю Name это имя формы, хоть если чесно я думал что
Код: plaintext
Me.
служит как обозначения обьектов открытой к примеру формы...
Ну в общем, банальность, но при имени формы Welcome

нужно было просто так и написать
Код: plaintext
  docmd.close acform, Me.Name
и ничего не выдумывать ))
...
Рейтинг: 0 / 0
Форма входа
    #37399216
askerli
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проверяйте поле логина на пустое значение... если что-то есть, то дальше проверяйте пароль не только на совпадение, но и на Null ... обязаны справиться, не трудно же...
...
Рейтинг: 0 / 0
25 сообщений из 85, страница 1 из 4
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Форма входа
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]