【问题标题】:VBA Attachment: Item Not found in CollectionVBA 附件:在集合中找不到项目
【发布时间】:2016-04-07 20:41:09
【问题描述】:

全部,

我正在尝试将 1 条记录的记录保存到驱动器。我花了大约一天的时间寻找解决方案,所以这是寻求帮助的最后努力。无论如何,我都不是开发人员,所以请放轻松。

代码如下。

记录所在的表:tracker。

我正在搜索的字段:ReqID - 其中 ReqID = 我正在输入的记录,找到附件并将其移动到某个位置。

Dim db As DAO.Database
Dim rsChild As DAO.Recordset2
Dim ReqID As String

ReqID = Me.Form![Text145]
Debug.Print ReqID

Set db = CurrentDb
Set rsChild = db.OpenRecordset("Select * from tracker Where " & ReqID & " = [tracker].[ID]", dbOpenDynaset)
Debug.Print rsChild.RecordCount



   If (rsChild.EOF = False) Or (rsChild.BOF = False) Then

    While Not rsChild.EOF
rsChild("FileData").SaveToFile "C:\Users\<folder>\"
        rsChild.Delete
    Wend
    End If

【问题讨论】:

  • 是否有任何错误或者它根本不起作用?您是否尝试调试 (F8) 并查看哪里出了问题?
  • [tracker] 表是否真的包含名为 [FileData] 的字段?如果没有,则在设计视图中打开表格,查看Attachment 字段实际调用的内容。
  • 我得到的错误是 RunTime 3265 "Item not found in collection" - 我认为它只是找不到附件..
  • 附件字段简称为附件。从我所见,“FileData”需要在那里。
  • 错误在 rsChild("FileData").SaveToFile "C:\Users\\"

标签: vba ms-access attachment-field


【解决方案1】:

您实际上需要使用两个 Recordset 对象:一个用于主记录,另一个用于与该记录关联的附件。这是适用于我的示例代码,其中 [tblTest] 是表的名称,[Attachments] 是 Attachment 字段的名称:

Option Compare Database
Option Explicit

Sub SaveAllAttachments()
    Dim cdb As DAO.Database
    Set cdb = CurrentDb
    Dim rstMain As DAO.Recordset
    Set rstMain = cdb.OpenRecordset("SELECT Attachments FROM tblTest WHERE ID=1", dbOpenDynaset)
    rstMain.Edit
    Dim rstChild As DAO.Recordset2
    Set rstChild = rstMain.Fields("Attachments").Value
    Do Until rstChild.EOF
        Dim fileName As String
        fileName = rstChild.Fields("FileName").Value
        Debug.Print fileName
        Dim fld As DAO.Field2
        Set fld = rstChild.Fields("FileData")
        fld.SaveToFile "C:\Users\Gord\Desktop\" & fileName
        rstChild.Delete  ' remove the attachment
        rstChild.MoveNext
    Loop
    rstChild.Close
    rstMain.Update
    rstMain.Close
End Sub

【讨论】:

  • 我试一试。如果可行的话,我给你买啤酒。
  • 在 rstMain.edit 获得“无法更新;当前已锁定”
  • 记录必须在某处打开。尝试关闭数据库并重新打开它。
  • 我想在输入请求后尽快存储附件。我猜我不能从同一个表格中做到这一点,对吗?我从表单中提取了 ReqID,我应该在释放记录后存储该信息并运行此代码吗?
  • 我不清楚您的工作流程是什么,但如果表单绑定到同一记录并且是.Dirty,那么这可能解释了锁定冲突。您可以尝试在开头添加 Me.Dirty = False 语句,看看是否有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
相关资源
最近更新 更多