使用组合框和AfterUpdate Event Procedure填充子窗体中的多个字段

人气:800 发布:2022-10-16 标签: ms-access vba

问题描述

我正在创建一组Access数据库表单,用于将植被数据输入到链接的SQL Server数据库中。对于一个协议,我创建了一个表单‘frmLPI’,用于输入来自名为Line-Point-Intercept的植被监测方法的数据。这是一种表格,其中有一个名为"frmLPIDetail"的子表格,其中记录了植物物种的单个计数。主窗体有三个未绑定的控件:[TransectOID]、[DataRec]和[DataObs]。对于我们每次运行协议时,TransectOID都是唯一的ID。对于每个TransectOID,我们采样了30个位置的植被,这些位置在名为LPI_OID的子表单中具有隐藏的唯一ID。子窗体通过TransectOID链接到主窗体。我希望我的用户能够单击主窗体中未绑定的[DataRec]和[DataObs]组合框,并在子窗体中自动填充所有30条记录的对应字段。我已经知道如何对子窗体中的记录执行此操作,但不知道如何为主窗体中的每个TransectOID值创建30条记录。以下是我的表格截图,以帮助您直观地了解我想要的是什么:

下面是我用来自动填充一条记录的代码


Private Sub Form_Load()
Me.TransectOID = Me.OpenArgs
End Sub

Private Sub Form_Deactivate()

    DoCmd.RunCommand acCmdSaveRecord

End Sub


Private Sub DataObs_AfterUpdate()
    Me!frmLPIDetail.Form!Data_observer = Me!DataObs
    Me.Dirty = False

End Sub


Private Sub DataRec_AfterUpdate()
    Me!frmLPIDetail.Form!Data_recorder = Me!DataRec
    Me.Dirty = False

End Sub

如有任何建议,我们将不胜感激

推荐答案

虽然Mazoula的答案要优雅得多,但在使用While循环之后,我发现了一种快速而肮脏的方法来完成我要做的事情。以下是我的代码:


Private Sub Form_Load()
Me.TransectOID = Me.OpenArgs
End Sub

Private Sub Form_Deactivate()

    DoCmd.RunCommand acCmdSaveRecord

End Sub

Private Sub DataObs_AfterUpdate()
Dim rs As DAO.Recordset

Set rs = Me!frmLPIDetail.Form.RecordsetClone
rs.MoveLast
rs.MoveFirst

While Not rs.EOF
    rs.Edit
    rs!Data_observer.Value = Me.DataObs.Value
    rs.Update
    rs.MoveNext
Wend
rs.Close

Set rs = Nothing
Me.Dirty = False
End Sub


Private Sub DataRec_AfterUpdate()
    Dim rs As DAO.Recordset

Set rs = Me!frmLPIDetail.Form.RecordsetClone
rs.MoveLast
rs.MoveFirst
While Not rs.EOF
    rs.Edit
    rs!Data_recorder.Value = Me.DataRec.Value
    rs.Update
    rs.MoveNext
Wend
rs.Close

Set rs = Nothing
    Me.Dirty = False

End Sub

894