我不确定是否还有这样的帖子,但我认为我的问题有所不同。
我目前正在设计一个数据库来跟踪雇主提供的员工培训。我发现的当前错误是通过使用绑定表(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。
有什么办法解决这个问题吗?
答案 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
中出现。