我没看过你之前版本为什么可以,
我只能告诉你现在这版本打开 修改窗体没符合筛选的记录的原因是
你的 public 变量还没有设置!
我建议你
1. 把修改窗体中 Form_Load 代码删掉,
取而代之则是在 主窗体中的 "修改钥匙_Click" 代码内改为
Private Sub 修改钥匙_Click()
DoCmd.OpenForm "frm钥匙修改", , , "[钥匙编号]='" & Form_frm钥匙子窗体.钥匙编号 & "'"
End Sub
2. 你上面的问题, 新增时, 我觉得在 钥匙名称_BeforeUpdate 或 钥匙名称_Exit 内做验证的!
还有不要用DCount , 用DLookup 是运作上比 DCount 快,及耗内存更少的.
所以
Private Sub 钥匙编号_BeforeUpdate(Cancel As Integer)
If Not IsNull(DLookup("[钥匙编号]", "tbl钥匙", "[钥匙编号] ='" & Me.[钥匙编号] & "'")) Then
MsgBox "你输入的钥匙编号【 " & Me.钥匙编号 & " 】已存在!请确认后再录入!!", vbExclamation, "警告"
Cancel = True
End If
End Sub
这样, 验证失败就不能离开控件, 除非按 ESC 取消更新, 还原原值.
或者你还可以加上其他验证 如
If IsNull( me!钥匙编号) Then
Msgbox "不能为空!", vbExclamation
Cancel = True
End If
为什么你一定要清空? 进行全选不好吗?
If Cancel Then
'把输入的数据全选了, 用户又看到输错什么, 又一输入就取代错误值了.
Me!钥匙编号.SelStart = 0
Me!钥匙编号.SelLength = 1000
End if