Я получаю ошибку компиляции: переменная не определена в бэкэнде, тот же код работает в точной копии во внешнем интерфейсе - PullRequest
0 голосов
/ 08 апреля 2020

Я следовал руководству о том, как сделать основную c форму входа в Access VBA, однако сегодня, когда я начал свою работу p c, кажется, что вход в систему не работает вообще в моей спине конец (из которого я изначально экспортировал форму входа в мой интерфейс). Это дало мне ошибку «Пользовательский тип не определен», указывающий на «Private Sub btnLogin_Click()», но это больше не так, теперь случайным образом, без каких-либо изменений, дает мне «Ошибка компиляции: переменная не определена», указывающая на «Private Sub btnLogin_Click() "и выделив" dbOpenSnapshot "

вот весь код из моего внутреннего файла, который дает мне ошибку

Option Compare Database
Option Explicit

Private Sub btnLogin_Click()

Dim rs As Recordset

Set rs = CurrentDb.OpenRecordset("BElogon", dbOpenSnapshot, dbReadOnly)

rs.FindFirst "logon_user='" & Me.txtboxname & "'"

If rs.NoMatch = True Then
    Me.txtwrongname.Visible = True
    Me.txtboxname.SetFocus
    Exit Sub
End If
Me.txtwrongname.Visible = False


If rs!logon_pass <> Me.txtboxpass Then
    Me.txtwrongpass.Visible = True
    Me.txtboxpass.SetFocus
    Exit Sub
End If

Me.txtwrongpass.Visible = False
DoCmd.OpenForm "FEindex"
DoCmd.Close acForm, Me.Name

End Sub

и вот версия в моем интерфейсе, которая работает безупречно

Option Compare Database
Option Explicit

Private Sub btnLogin_Click()

Dim rs As Recordset

Set rs = CurrentDb.OpenRecordset("BElogon", dbOpenSnapshot, dbReadOnly)

rs.FindFirst "logon_user='" & Me.txtboxname & "'"

If rs.NoMatch = True Then
    Me.txtwrongname.Visible = True
    Me.txtboxname.SetFocus
    Exit Sub
End If
Me.txtwrongname.Visible = False


If rs!logon_pass <> Me.txtboxpass Then
    Me.txtwrongpass.Visible = True
    Me.txtboxpass.SetFocus
    Exit Sub
End If

Me.txtwrongpass.Visible = False
DoCmd.OpenForm "FEindex"
DoCmd.Close acForm, Me.Name

End Sub

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

1 Ответ

0 голосов
/ 08 апреля 2020

Если предложения по декомпиляции базы данных не сработали, это может быть использование dbOpenSnapshot или dbReadOnly. Вместо этого попробуйте:

Set rs=CurrentDb.OpenRecordset("BElogon")

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

Set rs=CurrentDb.OpenRecordset("SELECT logon_pass FROM BElogon WHERE logon_user='" & Me!txtboxname & "'")
If Not (rs.BOF And rs.EOF) Then    ' have found a matching user
    If rs!logon_pass<>Me!txtboxpass Then    ' password supplied does not match that stored for the user

    End If
Else    '   user name not found

End If

С уважением,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...