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

如何通过VBA将数据库内的附件添加到表单的附件控件中

错误原因

Access 表单的附件控件的fileName/FileType/FileURL等属性均为只读属性,不能直接赋值修改。附件控件的内容完全依赖其绑定的表/查询附件字段,你需要通过 DAO 操作附件字段的子记录集来完成附件写入。

实现步骤

前提条件

确保你的附件控件attachctrl已经绑定到表单记录源中的一个附件类型字段,假设该字段名为存附件的字段名。

完整实现代码

Dim db As DAO.Database
Dim rsSource As DAO.Recordset
Dim rsSourceAttach As DAO.Recordset2
Dim rsTargetAttach As DAO.Recordset2
Dim strSQL As String

Set db = CurrentDb
' 读取源表的附件数据
strSQL = "SELECT [Analysis1] FROM [tblAnalysis] WHERE [ID] = '" & Me.cmb.Value & "'"
Set rsSource = db.OpenRecordset(strSQL, dbOpenDynaset)

If Not rsSource.EOF Then
    ' 获取源附件字段的子记录集
    Set rsSourceAttach = rsSource("Analysis1").Value
    ' 获取当前表单绑定的目标附件字段的子记录集
    Set rsTargetAttach = Me.Recordset("存附件的字段名").Value
    
    ' (可选)如果需要先清空目标字段原有附件,取消注释下方代码
    ' Do While Not rsTargetAttach.EOF
    '     rsTargetAttach.Delete
    '     rsTargetAttach.MoveNext
    ' Loop
    
    ' 遍历源附件,全部添加到目标字段
    rsSourceAttach.MoveFirst
    Do While Not rsSourceAttach.EOF
        rsTargetAttach.AddNew
        rsTargetAttach("FileData").Value = rsSourceAttach("FileData").Value
        rsTargetAttach("FileName").Value = rsSourceAttach("FileName").Value
        rsTargetAttach("FileType").Value = rsSourceAttach("FileType").Value
        rsTargetAttach.Update
        rsSourceAttach.MoveNext
    Loop
    
    ' 保存表单记录
    Me.Dirty = False
    
    ' 释放资源
    rsSourceAttach.Close
    rsTargetAttach.Close
    Set rsSourceAttach = Nothing
    Set rsTargetAttach = Nothing
End If

rsSource.Close
Set rsSource = Nothing
Set db = Nothing

特殊场景说明

如果你的表单没有绑定记录源,不能直接使用未绑定的附件控件写入内容,你需要先创建一个临时表,临时表中包含一个附件类型字段,将附件控件绑定到临时表的附件字段,再按上述逻辑操作临时表的附件字段即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:06:07