如何在MS Access表单中根据Item ID打开对应库存记录?
MS Access表单跳转对应库存记录问题解决
问题背景
我有一个名为New Departure的Access表单,表单上有Item ID输入控件和Open按钮,需求是:输入有效的Item ID后,点击Open按钮或按Enter键,在表单中打开1 Inventory表对应的记录。目前给Open按钮的OnClick事件添加了OpenForm宏,但无论输入什么Item ID,打开的始终是1 Inventory表的最后一条记录。
补充信息:
- Item ID字段为长整型,是
1 Inventory表的主键(属性表显示该字段必填、无重复,且为表主键) - 宏使用OpenForm操作,目标为关联
1 Inventory的表单
解决步骤
1. 修正宏的Where条件(核心问题)
当前宏的Where参数未正确关联输入框的值,导致筛选失效,默认跳转到最后一条记录。修改方式:
在宏的OpenForm操作中,Where Condition栏填写:
[Item ID] = Forms![New Departure]![ItemID输入框名称]
注意:
- 替换
ItemID输入框名称为你表单上实际的输入控件名称(比如控件叫txtItemID,就写Forms![New Departure]![txtItemID]) - 因Item ID是数字型,无需加单引号;若为文本型则需添加:
[Item ID] = 'Forms![New Departure]![txtItemID]'
2. 确保数据类型匹配
检查New Departure表单上的Item ID输入控件数据类型,必须和1 Inventory表的Item ID字段类型一致(均为长整型):
- 打开输入控件的属性表,找到数据类型选项,设置为“长整型”,避免类型不匹配导致筛选失效
3. 优化OpenForm的Data Mode
在宏的OpenForm操作中,将Data Mode设置为编辑或只读,不要设为添加,否则会默认打开新记录而非匹配的现有记录
4. 绑定Enter键触发功能
要实现按Enter键直接跳转,给Item ID输入控件添加KeyPress事件的VBA代码:
- 打开
New Departure表单的设计视图 - 选中Item ID输入控件,打开属性表→事件→KeyPress→点击[...]打开VBA编辑器
- 输入以下代码(替换控件名称为实际名称):
Private Sub txtItemID_KeyPress(KeyAscii As Integer) ' 按下Enter键时触发Open按钮的点击事件 If KeyAscii = 13 Then Me.cmdOpen_Click ' 替换cmdOpen为你的Open按钮名称 KeyAscii = 0 ' 取消默认的Enter键行为 End If End Sub
5. 增加ID有效性验证(可选)
为避免输入无效ID时跳转错误,可在Open按钮的OnClick事件中添加验证逻辑:
Private Sub cmdOpen_Click() ' 检查输入的Item ID是否为空 If IsNull(Me.txtItemID) Or Me.txtItemID = "" Then MsgBox "请输入Item ID!" Me.txtItemID.SetFocus Exit Sub End If ' 检查Item ID是否存在于库存表 If DCount("*", "1 Inventory", "[Item ID] = " & Me.txtItemID) = 0 Then MsgBox "该Item ID不存在,请重新输入!" Me.txtItemID.SetFocus Me.txtItemID.SelStart = 0 Me.txtItemID.SelLength = Len(Me.txtItemID) Exit Sub End If ' 执行打开表单操作 DoCmd.OpenForm "你的库存表单名称", , , "[Item ID] = " & Me.txtItemID End Sub
内容的提问来源于stack exchange,提问作者danielbuza_smns
相关产品推荐
相关产品推荐

