【问题标题】:Run-time error 2471 access vba运行时错误 2471 访问 vba
【发布时间】:2016-01-05 00:58:45
【问题描述】:

请帮忙 我有一个登录表单,其中组合框包含 3 个字段(员工 ID、员工姓名:[FirstName] & "" & [LastName]、JobTitle - qry 选择)。在下拉列表中仅显示一个字段(属性设置为 0'、1'、0' 宽度)。 frmLogin 还包含一个用于输入密码的文本框,并且有两个隐藏的文本框(名称和 JobTitle 用于执行其他功能)。当我选择用户名时,会填充隐藏框;但是,当我输入密码时,弹出窗口显示运行时错误“2471” - 您作为查询参数输入的表达式产生了以下错误:“admin”。

这是登录代码。

Private Sub cmdLogin_Click()

If IsNull(Me.cboLoginName) Or Me.cboLoginName = "" Then
MsgBox "You must select an employee name.", vbOKOnly, "Required data"
Me.cboLoginName.SetFocus
Exit Sub
End If

If IsNull(Me.tbxPassword) Or Me.tbxPassword = "" Then
MsgBox "You must enter a password", vbOKOnly, "Required data"
Me.tbxPassword.SetFocus
Exit Sub
End If
'next line is highlighted as error
If Me.tbxPassword.Value = DLookup("Password", "tblEmployees", "[EmployeeID]=" & Me.cboLoginName.Value) Then
Me.Visible = False
DoCmd.OpenForm "frmEntry"
Else

MsgBox "Invalid employee name / password combination. Please try again.", vbOKOnly, "Invalid Entry!"
Me.tbxPassword.SetFocus

End If

End Sub

Query for the combobox

【问题讨论】:

  • 您是否在失败的行上放置了一个断点并检查了 'Me.cboLoginName.Value' 的内容...我认为这是数字,否则您需要在字符串周围加上引号。
  • 在我将 JobTitle 添加到组合框的 qry 之前,一切正常。只有 EmployeeID、Employee Name:[FirstName] & " " & [LastName]。但我需要有 JobTitle 来处理其他事情。可能代码不知道取哪个字段。
  • 放断点,查看Me.cboLoginName.Value的内容。这可能不是您所期望的...即向组合框添加一列可能会改变您的列对齐方式...听起来像“管理员”是一个职位????
  • me.cboLoginName.Value = 管理员。而“Admin”是一个用户名
  • 那么,这是否会转化为:在 'EmployeeID' = 'Admin' 的表 'tblEmployees' 中找到'password' 字段? 'EmployeeID' 是数字字段吗?如果没有,我之前建议引用;但现在知道它是 alpha,你需要引号。但我认为问题在于使用了错误的列(您确实说过 Admin 是用户名而不是“EmpID”)

标签: vba


【解决方案1】:

由于我不知道您的组合框的行源或您的控件指定的列数,因此将以下代码粘贴到您的 DLookup 之前,看看您应该使用哪一列:

Dim i As Integer
For i = 0 To Me.cboLoginName.ColumnCount
    Debug.Print "Column " & i & " contains '" & Me.cboLoginName.Column(i) & "'"
Next i

【讨论】:

  • 谢谢你,我会试试这个,让你知道它是如何工作的
  • 当我在 DLookup 之前添加此代码时,它显示 i=4(但我在组合框中的查询中只有 3 列 (0,1,2))。
  • 当我尝试If Me.tbxPassword.Value = DLookup("[Password]", "tblEmployees", "[EmployeeID]= '" & Me.cboLoginName.Column(1) & "'") Then 时,我收到运行时错误 3464(标准表达式中的数据类型不匹配)。
  • 我认为我们在相互理解方面存在问题。您说您的查询中只有三列,但在上面您说您添加了“JobTitle”,这将是第四列。您还说我的代码显示'i = 4',但您从未提及其他数据,例如“列 n 包含'????'请显示整个结果...您的查询、组合框和您选择的列不匹配。此代码错误:“DLookup("Password", "tblEmployees", "[EmployeeID]=" & Me.cboLoginName .Value)" - 除非 cboLoginName 包含 EmployeeID - 或者您指定了正确的列。
  • 是的,我添加了“职位”,它是第 3 列。我提到我的查询在我的问题中包含 3 列 - 一开始。此外,当我在 DLookup 之前将您的代码添加到我现有的代码中时,它并没有给我确切的结果,只是与突出显示的行相同的错误 - 没什么新的),当我将鼠标悬停时 " & i & "它显示我 = 4。 DLookup("Password", "tblEmployees", "[EmployeeID]=" & Me.cboLoginName.Value) 也可以完美地工作,无需在查询中添加新的职位字段(其中 cboLoginName 包含 EmployeeID 和 Employee Name:[FirstName] & " " & [LastName] 列)。
猜你喜欢
  • 2016-08-03
  • 2010-09-22
  • 1970-01-01
  • 2014-07-31
  • 1970-01-01
  • 2014-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多