powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Использование логина и пароля в access
13 сообщений из 13, страница 1 из 1
Использование логина и пароля в access
    #39663243
firelis71
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток! Будьте добры, помогите, в VBA я совсем ноль и потому не могу прикрутить к своей БД этот код:

Код: vbnet
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.
29.
30.
31.
32.
33.
34.
35.
36.
37.
Private Sub cmdLogin_Click()
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



Поясните пошагово, как это сделать? А в идеале пример реализации.
...
Рейтинг: 0 / 0
Использование логина и пароля в access
    #39663262
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
firelis71Поясните пошагово, как это сделать?
щаг1: выложите вашу базу в качестве примера
...
Рейтинг: 0 / 0
Использование логина и пароля в access
    #39663294
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
firelis71, создается модальная форма с двумя полями и двумя кнопками, поля называются cboCurrentEmployee-логин, Поле_для_пароля-пароль, кнопки одна наверное exit , другая -cmdLogin - вот на её событие нажать кнопку и вешается данный код.
...
Рейтинг: 0 / 0
Использование логина и пароля в access
    #39663328
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleckofirelis71, создается модальная форма с двумя полями и двумя кнопками

Добавлю
1. Делаем таблицу Сотрудники и нужно разобраться с полями ибо в коде ищется ID, а в форме будет вводиться скорее всего Фамилия,
так будет работать если в ID будет записано например Иванов В.В. вместо уникального кода
2. На счет самого кода вообще промолчу... проверка на ввод имени и пароля делается якобы внутри перебора всех записей таблицы сотрудники - это нечто...
...
Рейтинг: 0 / 0
Использование логина и пароля в access
    #39663394
firelis71
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alecko, создал модальную форму, но вылетает ошибка "Run-time error '3070': "SekPriv" не распознается ядром СУБД Microsoft Access как допустимое имя поля или выражение" на позиции .FindFirst ("Логин=" & Me.txtLogin.Value)

Сейчас код такой:

Код: vbnet
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.
29.
30.
31.
32.
33.
34.
35.
36.
37.
Private Sub Кнопка1_Click()
Dim rst As DAO.Recordset

Set rst = CurrentDb.OpenRecordset("Пользователи", dbOpenDynaset)
      With rst
                 If IsNull(Me.txtLogin.Value) Then
                       MsgBox "Ошибка входа! Выберите пользователя."
                       Exit Sub
                 Else
                 .FindFirst ("Логин=" & Me.txtLogin.Value)
                 If .NoMatch Then
                       MsgBox "Ошибка входа! О данном пользователе нет информации в БД."
                       Exit Sub
                 Else:
                     If Me.txtPassword.Value <> .Fields("Пароль").Value Then
                         MsgBox "Пароль не правильный или не соответствует имени пользователя"
                          Exit Sub
                     End If
                     If IsNull(Me.txtPassword.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



Модератор: firelis71 пожалейте глаза читающих. Пользуйтесь тэгами оформления (кнопка CRC в редакторе)
...
Рейтинг: 0 / 0
Использование логина и пароля в access
    #39663395
firelis71
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmag,
1. С полями, вроде, разобрался, однако вылетает ошибка указанная постом выше.
2. Насчет кода, к сожалению, ничего сказать не могу, т.к. совершенно в этом не шарю, а нашел я его на этом форуме и пытаюсь использовать.
...
Рейтинг: 0 / 0
Использование логина и пароля в access
    #39663423
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
firelis71, имена форм точно имеют такие названия?
"Учет отмен (Привокзальный)"
"Учет отмен (Пролетарский)"
"Учет отмен (Центральный)"...
Таблица "Пользователи" должна иметь поля:"Логин", "Пароль", "Отдел".
.FindFirst ("Логин=" & Me.txtLogin.Value) - нужно скобки убрать и учитывая что Логин - обычно текстовая константа
Код: vbnet
1.
.FindFirst "Логин=""" & Me.txtLogin.Value & """"



p.s. ничто не мешает проверку на Null вынести до открытия рекордсета.
модифицировать код можно бесконечно, настолько он плох.
но в качестве примера код пойдет - есть основные этапы проверки.
...
Рейтинг: 0 / 0
Использование логина и пароля в access
    #39663434
firelis71
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alecko,
Офигеть! Ура! Заработало! Спасибо большое вам! Разрешите вопрос задать, вот в этой строке
Код: vbnet
1.
.FindFirst "Логин=""" & Me.txtLogin.Value & """"


что значат множественные ковычки? И есть ли возможность скинуть пример хорошего кода? Был бы очень благодарен.
...
Рейтинг: 0 / 0
Использование логина и пароля в access
    #39663442
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Использование логина и пароля в access
    #39663710
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
firelis71, образцы хорошего кода есть у Гетца :). Лично мой код подвергался уже обструкции :), так что он априори не может быть "хорошим". да и сильно насыщен функциями, программами даже классами, поскольку и подключение таблиц, encrypt/decrypt и подготовка интерфейса и пр. вещи -все происходит во время и после проверки логина/пароля пользователя.
В Вашем случае все просто - в зависимости от логина-пароля открывается та или иная форма.

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

Код: vbnet
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.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
Private Sub Кнопка1_Click()
On error goto err1
Dim rst As DAO.Recordset, str$, Mess$(), Parol$
' str- можно завести куда нить в табличку и редактировать ошибки, или язык не копаясь в коде
str="Контроль корректности ввода данных|Ошибка входа! Выберите пользователя и введите пароль|Ошибка входа! О данном пользователе нет информации в БД.|" & _
"Пароль не правильный или не соответствует имени пользователя|Ошибка в модуле Кнопка1_Click - для этого пользователя форма не подготовлена-введите данные другого пользователя"
Mess=split(str,"|")
' проверили поля
 If IsNull(Me.txtLogin.Value) OR IsNull(Me.txtPassword.Value) Then Msgbox Mess(1),vbExclamation ,Mess(0): Exit sub
' ------------------------------------------------
Set rst = CurrentDb.OpenRecordset("Пользователи", dbOpenSnapshot) '  менять ничего не будем так что dbOpenSnapshot
      With rst
                 .FindFirst "[Логин]=""" & Me.txtLogin.Value & """"
               If .NoMatch Then
                       MsgBox Mess(2),vbExclamation, Mess(0): goto ex1
               Else
                       Parol=Me.txtPassword.Value
                     ' encrypt Parol ' зашифровываем пароль чтобы получить пароль такого же вида как хранящийся в таблице (хотя бы XOR-ом)
                 ' If Instr(.Fields("Пароль").Value,Parol,0)>0 Then ' работает быстрее простого сравнения, учитывает регистр (может нужно)
                 If .Fields("Пароль").Value=Parol Then ' по старинке, пароль же текстовый... даже если состоит из цифр...
                     Otkryt .Fields("Отдел").Value
                 Else 
                       MsgBox Mess(3),vbExclamation ,Mess(0)
                 End If
            End if
      End With

ex1:' если открыли рекордсет его нужно закрыть - это хороший тон (вместо Exit sub)
rst.Close
Set rst = Nothing
Exit sub
err1:
Select case err.number
   Case vbObjectError + 1
           Msgbox Mess(4),vbCritical ,Mess(0)
             goto ex1
  Case else
         MsgBox "Error: " & err.Description & _
             " (" & err.Number & ")"
End select
End Sub

Private sub Otkryt (vid$)
Select Case vid
         Case "Привокзалльный"
                 DoCmd.OpenForm "Учет отмен (Привокзальный)"
         Case "Пролетарский"
                 DoCmd.OpenForm "Учет отмен (Пролетарский)"
         Case "Центральный"
                 DoCmd.OpenForm "Учет отмен (Центральный)"
        Case else :Err.Raise vbObjectError + 1
End Select
DoCmd.Close
End sub

...
Рейтинг: 0 / 0
Использование логина и пароля в access
    #39663788
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ошибка прокралась в последний момент
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Private sub Otkryt (vid$)
Dim txt$
Select case vid
          Case "Привокзалльный": txt="Привокзальный"
         Case  "Пролетарский","Центральный" : txt=vid
        Case else :Err.Raise vbObjectError + 1
End Select
DoCmd.Close
DoCmd.OpenForm "Учет отмен (" & txt & ")"
End sub

...
Рейтинг: 0 / 0
Использование логина и пароля в access
    #39663905
firelis71
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alecko,
Ого, тяжеловесно для меня, но я очень благодарен! Спасибо!
...
Рейтинг: 0 / 0
Использование логина и пароля в access
    #39663932
firelis71, я бы сделал иначе. Вместо поля для логина создал бы поле со списком (ПС) на запросе к "Пользователи", возвращающем логин и пароль (скрытый столбец). Тогда весь код сведется к проверке If Me!Поле_для_пароля = Me!ПC.Column(1) Then
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Использование логина и пароля в access
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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