You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Access中子窗体多条数据传递至另一窗体的技术问询

多条子窗体数据传递至Access发票窗体的解决方案

问题分析

当前代码仅能传递主窗体的单条数据到发票窗体(FACTURAR),但子窗体中的多条采购明细(单位、发票数量等)无法批量传递——核心原因是子窗体包含多条记录,不能像单个文本框那样直接赋值,需要逐条读取并写入目标子窗体。

可行实现方法

通过DAO记录集循环读取源子窗体的每条记录,再逐条插入到目标发票窗体的子窗体中,具体代码修改如下:

Private Sub Boton_Click()
    Dim strFrmName As String
    strFrmName = "FACTURAR"
    Dim rsSource As DAO.Recordset
    Dim rsTarget As DAO.Recordset
    
    '打开发票窗体
    DoCmd.OpenForm strFrmName
    
    '传递主窗体基础数据
    With Forms(strFrmName)
        .RUT_2 = Me.RUT
        .REGIS_RECP_2 = Me.registroRecepcion
        .NAME_2 = primerNombre & " " & primerApellido & " " & segundoApellido
        .BOLETA_2 = Me.BOLETA_INV
        
        '获取源子窗体的记录集(替换【源子窗体控件名】为实际控件名称)
        Set rsSource = Me!源子窗体控件名.Form.RecordsetClone
        '获取目标发票子窗体的记录集(替换【目标子窗体控件名】为实际控件名称)
        Set rsTarget = .!目标子窗体控件名.Form.Recordset
        
        '循环处理每条采购明细
        If Not rsSource.EOF Then
            rsSource.MoveFirst
            Do Until rsSource.EOF
                '在目标子窗体添加新记录
                rsTarget.AddNew
                '赋值对应字段(替换为实际字段名,比如`单位`、`发票数量`等)
                rsTarget!单位 = rsSource!单位
                rsTarget!发票数量 = rsSource!发票数量
                '如需传递其他字段,继续添加赋值语句
                rsTarget.Update
                rsSource.MoveNext
            Loop
        End If
        
        '释放资源
        rsSource.Close
        rsTarget.Close
        Set rsSource = Nothing
        Set rsTarget = Nothing
    End With
End Sub

注意事项

  • 确保目标子窗体已正确绑定到存储发票明细的表/查询,且字段名与源子窗体对应一致。
  • 替换代码中【源子窗体控件名】、【目标子窗体控件名】以及各字段名为实际项目中的名称。
  • 若需避免重复添加数据,可在rsTarget.AddNew前添加判断逻辑,比如通过唯一标识检查目标子窗体是否已存在该记录。
  • 需在VBE中启用DAO库:点击【工具】→【引用】,勾选Microsoft DAO x.x Object Library(x.x为版本号,如3.6)。

内容的提问来源于stack exchange,提问作者Linuxs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 07:55:27