首页 > 解决方案 > 我得到一个编译错误:变量未在后端定义,相同的代码在前端的精确副本中工作

问题描述

我正在关注如何在访问 vba 中制作基本登录表单的指南,但是今天当我启动我的工作电脑时,登录似乎在我的后端根本不起作用(我最初从中导出了登录形成我的前端)。它给了我一个指向“”的“用户定义的类型未定义”错误,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

我发现它可能是缺少参考但是我的前端也没有启用它们并且它可以工作,所以我只是想理解这一点..

标签: vbams-access

解决方案


如果反编译数据库的建议不起作用,可能是使用了dbOpenSnapshotor 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

问候,


推荐阅读