子窗体数据源为查询或表时,如何获取当前记录的OrderNumber值?
解决子窗体源对象为查询/表时获取订单号的方法
嘿,这个问题我之前在Access开发中也碰到过,确实当子窗体直接绑定到查询或表时,常规的Me!OrderNumber写法会失效,下面给你几个实用的解决方案:
方法1:通过子窗体的Recordset对象访问
不管子窗体的源对象是窗体、查询还是表,Recordset属性都能直接访问当前记录的字段值,这是最稳妥的方式:
如果是在子窗体的事件代码中(比如双击、单击事件):
Dim currentOrderNum As Variant ' 先判断是否有有效记录 If Not Me.Recordset.EOF And Not Me.Recordset.BOF Then currentOrderNum = Me.Recordset!OrderNumber MsgBox "当前订单号:" & currentOrderNum Else MsgBox "当前无记录" End If
如果是在父窗体的代码中访问子窗体的订单号:
假设你的子窗体控件名称是OrderSubform,代码如下:
Dim orderNum As Variant With Me.OrderSubform.Form If Not .Recordset.EOF And Not .Recordset.BOF Then orderNum = .Recordset!OrderNumber MsgBox "子窗体当前订单号:" & orderNum End If End With
方法2:通过子窗体的Controls集合访问
Access会自动为查询/表的字段生成对应控件,你可以直接通过Controls集合引用:
子窗体内部代码:
If Not IsNull(Me.Controls("OrderNumber").Value) Then MsgBox "当前订单号:" & Me.Controls("OrderNumber").Value End If
父窗体代码:
If Not IsNull(Me.OrderSubform.Form.Controls("OrderNumber").Value) Then MsgBox "子窗体当前订单号:" & Me.OrderSubform.Form.Controls("OrderNumber").Value End If
方法3:将查询/表包装成窗体(推荐)
如果你的子窗体需要频繁操作字段或添加自定义逻辑,更推荐这种方式:
- 创建一个新窗体,把目标查询或表设为它的记录源
- 将
OrderNumber等需要的字段添加到窗体上 - 最后把子窗体控件的源对象设置为这个新建的窗体
这样你就能像之前一样,用Me!OrderNumber(子窗体内部)或者Me!OrderSubform.Form!OrderNumber(父窗体)轻松获取字段值,还能给子窗体添加自定义事件,扩展性更强。
内容的提问来源于stack exchange,提问作者Patrick
相关产品推荐
相关产品推荐

