Microsoft Access中根据discount_code自动填充表单discount_amount的实现方法
Microsoft Access 表单字段自动填充实现方案
方案1:使用更新后事件+DLookup函数(无需编写代码,实现最快)
- 打开目标表单的设计视图,选中
discount_code输入框控件 - 打开控件的属性面板,切换到「事件」标签,找到更新后选项,点击该行右侧的省略号按钮,选择「表达式生成器」
- 在生成器中输入如下表达式,保存即可:
[discount_amount] = DLookup("discount_amount", "discount", "discount_code = '" & [discount_code] & "'")
若你的discount_code字段是数值类型,筛选条件要去掉单引号,修改为:
discount_code = " & [discount_code]
- 保存表单后测试:在discount_code输入框填入编码并切换到其他控件时,系统会自动匹配discount表的对应金额回填到discount_amount字段。
方案2:使用VBA事件过程(支持自定义异常处理,扩展性更强)
如果需要添加未匹配提示、特殊规则校验等逻辑,推荐用该方案:
- 同样在表单设计视图选中
discount_code控件,进入属性面板的「事件」标签,点击更新后右侧的省略号,选择「代码生成器」进入VBA编辑界面 - 在自动生成的事件框架中填入如下代码:
Private Sub discount_code_AfterUpdate() ' 清空原有折扣值 Me!discount_amount = Null ' 仅当输入了折扣码时执行查询 If Not IsNull(Me!discount_code) Then Dim rs As DAO.Recordset ' 查询时处理输入的单引号避免语法错误 Set rs = CurrentDb.OpenRecordset("SELECT discount_amount FROM discount WHERE discount_code = '" & Replace(Me!discount_code, "'", "''") & "'", dbOpenDynaset) ' 匹配到记录则回填 If Not rs.EOF Then Me!discount_amount = rs!discount_amount ' 可选:未匹配到的提示 ' Else ' MsgBox "输入的折扣码不存在", vbInformation End If rs.Close Set rs = Nothing End If End Sub
- 保存代码和表单即可生效。
注意事项
- 若discount表中discount_code存在重复值,上述两种方案都只会返回第一条匹配到的记录的折扣金额,建议给discount表的discount_code字段添加唯一索引避免冲突
- 若需要输入过程中实时触发匹配,可将事件绑定到更改事件,但更推荐用更新后事件,避免输入过程中频繁查询拖慢性能
内容的提问来源于stack exchange,提问作者NimDang
相关产品推荐
相关产品推荐

