【问题标题】:DoCmd.FindRecord isn't finding the record in Access VBA codeDoCmd.FindRecord 在 Access VBA 代码中找不到记录
【发布时间】:2018-12-25 20:54:36
【问题描述】:

我不确定是否还有这样的帖子,但我认为我的问题有点不同。

我目前正在设计一个数据库来跟踪雇主提供的员工培训。我发现当前的错误是使用绑定表单 (frmAddEmployee) 将员工添加到员工表 (tblEmployees)。

我目前的工作是 VBA 代码,当您在员工编号的文本框中输入值并在表中找到重复记录时,它会显示通知。 VBA 还将以与您在清除通知时输入的值对应的相同形式显示记录。

这是我在更新后用于 txtEmpNumber 的代码:

Private Sub txtEmpNumber_AfterUpdate()
Dim EmpNum As String
Dim stLinkCriteria As String
Dim EmpNr As Integer

'Assign the entered employee number to a variable
EmpNum = Me.txtEmpNumber.Value
stLinkCriteria = "[EmpNumber] = " & "'" & EmpNum & "'"
If Me.txtEmpNumber = DLookup("[EmpNumber]", "tblEmployees", stLinkCriteria) Then
    MsgBox "This employee number, " & EmpNum & ", has already been entered in database." _
           & vbCr & vbCr & "Please check the number.", vbExclamation, "Duplicate information"
    Me.Undo
    'show the record of matched employee number from the employees table
    EmpNr = DLookup("[EmpID]", "tblEmployees", stLinkCriteria)
    Me.DataEntry = False
    DoCmd.FindRecord EmpNum, , , , , acCurrent
    Me.cmdSave.Enabled = False
    Me.cmdNew.Enabled = True
Else
    Me.txtIDNumber.Enabled = True
End If
End Sub

通知显示存在重复值,例如 1234,并在表中显示 1234 的记录,但当我尝试不同的值(如 5678)时,它再次显示 1234 的值而不是 5678。

任何想法如何解决这个问题?

【问题讨论】:

  • 这可能不是问题,但我注意到在Me.Undo 之后,您查找IdEmpNr,然后使用FindRecord 搜索EmpNum。也许您打算将FindRecordEmpNr 一起使用?
  • 或者,当你说“它再次显示值”时,你是在说弹出通知,还是在表中搜索匹配记录?
  • 能否发个数据库的例子给你看看?
  • @AnnL。是的,它的匹配记录
  • 使用更新前事件来验证输入。

标签: ms-access vba


【解决方案1】:

认为你遇到的问题是这个命令:

 DoCmd.FindRecord EmpNum, , , , , acCurrent

...在 current 字段中搜索。但是如果没有当前字段(因为表单没有焦点),或者当前字段是其他字段(例如ID),则“查找”将找不到匹配项,并且记录你看到的不会改变。

最简单的解决方法是将您的代码更改为:

 DoCmd.FindRecord EmpNum, , , , , acAll

这将在所有字段中搜索EmpNum 的值。

但是,如果EmpNum 的值也有可能出现在txtEmpNumber 以外的其他字段中(例如,如果某人有EmpNum = 12 而其他人是ID = 12),这最终会开始“发现”错误的记录。

所以我认为最好的办法是在执行FindRecord 之前确保您的当前字段是txtEmpNumber

Me.txtEmpNumber.SetFocus
DoCmd.FindRecord EmpNum, , , , , acCurrent

这将确保它在尝试查找记录时查看txtEmpNumber

【讨论】:

  • 这肯定是答案,但我怀疑我是否会遇到其他 ID 字段的问题,因为每个表都有自己的唯一 ID 字段。但是谢谢你的帮助。我还是新手,所以我不知道如何标记为答案
  • @Vanzie 你看,答案是哪里有一个数字,一个上三角和一个下三角?您应该在其下方看到一个复选标记。如果您单击它,它应该将此答案标记为“已接受”。而且我相信您甚至会因接受答案而获得积分!
猜你喜欢
  • 1970-01-01
  • 2015-11-11
  • 2013-03-20
  • 2014-08-15
  • 1970-01-01
  • 1970-01-01
  • 2014-04-09
  • 2018-09-29
  • 1970-01-01
相关资源
最近更新 更多