我在 Access 数据库的登录表单中收到运行时 13 错误 =“不匹配错误”。 目前该表单适用于成员(member)并成功登录,但是当我尝试从培训师表中输入正确的登录详细信息时,出现运行时错误。
Option Compare Database
Private Sub Command1_Click()
If IsNull(Me.txtEmail) Then
MsgBox "Please Enter Email Address", vbInformation, "Email Requeired"
Me.txtEmail.SetFocus
ElseIf IsNull(Me.txtPassword) Then
MsgBox "Please Enter Email Address", vbInformation, "Email Requeired"
Me.txtPassword.SetFocus
Else
'process the job'
If (IsNull(DLookup("MemberEmail", "TBL_Members", "MemberEmail = '" & Me.txtEmail.Value & "' And MemberPassword = '" & Me.txtPassword.Value & "'")) Or (DLookup("TrainerEmail", "TBL_Trainers", "TrainerEmail = '" & Me.txtEmail.Value & "' And TrainerPassword = '" & Me.txtPassword.Value & "'"))) Then
MsgBox "Invalid Username or Password!"
Else
MemberEmail = DLookup("[MemberEmail]", "TBL_Members", "[MemberEmail] = '" & Me.txtEmail.Value & "'")
TrainerEmail = DLookup("[TrainerEmail]", "TBL_Trainers", "[TrainerEmail] = '" & Me.txtEmail.Value & "'")
SecurityLevel = DLookup("[SecurityLevel]", "TBL_Members", "[MemberEmail] = '" & Me.txtEmail.Value & "'")
DoCmd.Close
If (TempPass = "password") Then
MsgBox "Please change Password", vbInformation, "New password required"
DoCmd.OpenForm "frmUserinfo", , , "[UserLogin] = " & UserLogin
Else
'open different form according to user level
If SecurityLevel = 1 Then ' for Members
DoCmd.OpenForm "Admin"
Else
DoCmd.OpenForm "Navigation Form"
End If
End If
End If
End If
End Sub
Private Sub Form_Load()
Me.txtEmail.SetFocus
End Sub
最佳答案
你的问题出在这个表达式中:
If (IsNull(DLookup("MemberEmail", "TBL_Members", "MemberEmail = '" & _
Me.txtEmail.Value & "' And MemberPassword = '" & Me.txtPassword.Value & "'")) _
Or (DLookup("TrainerEmail", "TBL_Trainers", "TrainerEmail = '" & _
Me.txtEmail.Value & "' And TrainerPassword = '" & Me.txtPassword.Value & "'"))) _
Then
让我们添加一些变量以使其更易于阅读:
Dim varM As Variant
Dim varT As Variant
varM = DLookup("MemberEmail", "TBL_Members", "MemberEmail = '" & _
Me.txtEmail.Value & "' And MemberPassword = '" & Me.txtPassword.Value & "'"))
varT = DLookup("TrainerEmail", "TBL_Trainers", "TrainerEmail = '" & _
Me.txtEmail.Value & "' And TrainerPassword = '" & Me.txtPassword.Value & "'"))
If (IsNull(varM Or varT)) Then
问题是 Or
需要 bool 或数字操作数,但您将其应用于电子邮件地址,然后检查结果是否为空。您真正想要做的是检查每个表达式是否为 null,然后将这些表达式的结果用作 Or
的操作数:
If (IsNull(varM) Or IsNull(varT)) Then
此外,正如评论中指出的那样,运算符应该是 And
,而不是 Or
,因为您绝不会期望这两个值都是非空的:
If (IsNull(varM) And IsNull(varT)) Then
我会留给您解决如何在没有变量的原始表达式中修复它。
关于database - Microsoft Access 数据库登录表单中的不匹配错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52768178/