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

Access链接SharePoint列表复制附件时RecordCount异常问题求助

Access链接SharePoint列表复制附件时RecordCount异常激增的原因与解决

核心原因分析

  • SharePoint链接表的附件字段并非本地表那样的内嵌二进制数据,而是远程关联的独立附件子表,依赖父记录的唯一GUID进行关联。
  • 当代码执行到.MoveNext时,若未明确限定附件子表的父记录关联条件,Access会隐式加载SharePoint列表中所有记录的附件数据集,而非仅当前目标记录的附件,直接导致RecordCount骤增。
  • 本地表的附件操作基于内存缓存的单条记录数据,能精准定位;但链接SP的表必须依赖已提交记录的GUID,未提交的临时记录无法建立有效关联,进而触发全量加载。

关键解决方案

1. 强制先提交目标记录到SharePoint

链接SP的表不支持内存中临时保存未提交记录,附件操作必须基于已存在的SP记录——先执行.Update提交目标记录,让SharePoint生成唯一GUID后再处理附件。

示例修正DAO代码:

Sub CopySPListAttachment()
    Dim db As DAO.Database
    Dim rsParent As DAO.Recordset
    Dim rsSourceAttach As DAO.Recordset2
    Dim rsTargetAttach As DAO.Recordset2
    Dim sourceID As String
    
    Set db = CurrentDb
    ' 定位源记录
    Set rsParent = db.OpenRecordset("SELECT ID, Attachments FROM SP_Linked_Table WHERE ID = 1")
    sourceID = rsParent!ID
    
    ' 创建并提交目标记录(必须先完成此步骤)
    rsParent.AddNew
    rsParent!Title = "新记录副本" ' 填写必填字段
    rsParent.Update
    rsParent.Bookmark = rsParent.LastModified ' 定位到刚提交的目标记录
    
    ' 打开源记录的附件子表(重新定位回源记录)
    rsParent.MoveFirst
    Set rsSourceAttach = rsParent!Attachments.Value
    
    ' 打开目标记录的附件子表
    rsParent.Bookmark = rsParent.LastModified
    Set rsTargetAttach = rsParent!Attachments.Value
    
    ' 逐个复制附件
    Do While Not rsSourceAttach.EOF
        rsTargetAttach.AddNew
        rsTargetAttach!FileData = rsSourceAttach!FileData
        rsTargetAttach!FileName = rsSourceAttach!FileName
        rsTargetAttach!FileExtension = rsSourceAttach!FileExtension
        rsTargetAttach.Update
        rsSourceAttach.MoveNext
    Loop
    
    ' 清理对象
    rsTargetAttach.Close: Set rsTargetAttach = Nothing
    rsSourceAttach.Close: Set rsSourceAttach = Nothing
    rsParent.Close: Set rsParent = Nothing
    Set db = Nothing
End Sub

2. 避免附件子表的隐式全量加载

  • 操作附件前,必须通过Bookmark或ID精准定位父记录,禁止在父记录集移动后未重新定位就访问附件字段。
  • 不要依赖RecordCount判断附件数量,直接通过EOF遍历即可;若必须用RecordCount,需先对附件子表执行.MoveLast再.MoveFirst,但SP场景下不推荐。

3. ADO方式的适配说明

ADO的AppendChunk对SP链接表的附件字段完全无效——SP附件是独立存储的,并非二进制字段。若用ADO,需通过SharePoint的GUID关联条件查询附件子表,或直接调用SP REST API操作附件。

测试验证要点

  • 测试前确认目标记录已在SharePoint列表中可见(即提交成功)。
  • 若仍出现RecordCount异常,检查父记录集是否在操作附件过程中被意外移动,导致附件子表关联了错误的记录范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 14:15:14