Private Sub btn_Login_Click()
On Error GoTo Err_Handler
Dim db As Object
Dim td As Object
Dim fld As Object
Dim rs As Object
Dim strSQL As String
Dim tName As String
Dim fLogin As String
Dim fPass As String
Dim fRole As String
Dim fMgr As String
Set db = CurrentDb
' Перебираем ВСЕ таблицы
For Each td In db.TableDefs
' Пропускаем системные
If Left(td.Name, 4) = "MSys" Or Left(td.Name, 4) = "~TMP" Then GoTo NextTable
fLogin = "": fPass = "": fRole = "": fMgr = ""
' Ищем поля внутри таблицы
For Each fld In td.Fields
fName = fld.Name
' Ищем Логин в любом виде
If InStr(1, fName, "огин", vbTextCompare) > 0 Or InStr(1, fName, "ogin", vbTextCompare) > 0 Then fLogin = fName
' Ищем Пароль в любом виде
If InStr(1, fName, "арол", vbTextCompare) > 0 Or InStr(1, fName, "assw", vbTextCompare) > 0 Then fPass = fName
' Ищем Роль
If InStr(1, fName, "ол", vbTextCompare) > 0 And Len(fName) <= 5 Then fRole = fName
If InStr(1, fName, "ole", vbTextCompare) > 0 And Len(fName) <= 5 Then fRole = fName
' Ищем КодМенеджера или ManagerID
If InStr(1, fName, "енеджер", vbTextCompare) > 0 Or InStr(1, fName, "anager", vbTextCompare) > 0 Then fMgr = fName
Next
' Если нашли и логин и пароль — это наша таблица
If fLogin <> "" And fPass <> "" Then
tName = td.Name
Exit For
End If
NextTable:
Next
If tName = "" Then
MsgBox "Таблица с полями Логин/Пароль не найдена!", vbCritical
Exit Sub
End If
' Строим SQL
strSQL = "SELECT * FROM [" & tName & "] WHERE [" & fLogin & "] = '" & Me.txt_Login & "' AND [" & fPass & "] = '" & Me.txt_Password & "'"
Set rs = db.OpenRecordset(strSQL)
If rs.EOF Then
MsgBox "Неверный логин или пароль!", vbCritical
Me.txt_Password = Null
Me.txt_Password.SetFocus
rs.Close
Exit Sub
End If
' Сохраняем роль
If fRole <> "" Then TempVars!CurrentRole = rs(fRole)
If fMgr <> "" Then TempVars!CurrentMgrID = Nz(rs(fMgr), 0)
rs.Close
Set rs = Nothing
Set db = Nothing
DoCmd.Close acForm, "frm_Login"
' Проверяем, есть ли frm_MainMenu
On Error Resume Next
DoCmd.OpenForm "frm_MainMenu"
If Err.Number <> 0 Then
MsgBox "Форма frm_MainMenu не найдена! Вход выполнен.", vbExclamation
End If
Exit Sub
Err_Handler:
MsgBox "Ошибка: " & Err.Number & " - " & Err.Description & vbCrLf & "SQL: " & strSQL, vbCritical
End Sub