DoCmd.FindRecord在Access VBA代码中找不到记录

时间:2018-12-25 20:54:36

标签: ms-access access-vba

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

我目前正在设计一个数据库来跟踪雇主提供的员工培训。我发现的当前错误是通过使用绑定表(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。

有什么办法解决这个问题吗?

enter image description here

1 个答案:

答案 0 :(得分:0)

认为您遇到的问题是该命令:

 DoCmd.FindRecord EmpNum, , , , , acCurrent

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

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

 DoCmd.FindRecord EmpNum, , , , , acAll

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

但是,如果EmpNum的值也可能出现在txtEmpNumber以外的其他字段中(例如,如果某人拥有EmpNum = 12,而其他人则是{{1} }),最终将开始“查找”错误的记录。

因此,我认为最好的方法是在执行ID = 12之前确保当前字段为txtEmpNumber

FindRecord

这将确保尝试查找记录时,它仅在Me.txtEmpNumber.SetFocus DoCmd.FindRecord EmpNum, , , , , acCurrent 中出现。