为什么添加附件以通过脚本访问数据库会产生错误

问题描述 投票:0回答:1

我正在编写一个脚本,将来自O365邮箱的电子邮件引入MS Access。访问电子邮件并导出附件都可以正常工作。可以使用发送者,日期/时间,主题,正文等在数据库中创建记录。

但是,我无法将附件添加到数据库的附件字段中。

此行总是产生类型不匹配错误:

Set rsAttach = rstDocs.Fields("Attachments").Value

rstDocs已经用于更新记录中的其他字段-没问题。

但是我需要rsAttach对象来加载文件附件。

[已经尝试了创建和定义rsAttach对象的多种变体。我尝试了在线示例,并且基本上使用了MSDN上的书以及该网站上的其他示例。

omEmail是Outlook中的电子邮件对象。到这里时,它已经保存在TmpPath中。

Set cn = CreateObject("ADODB.Connection")
Set rstDocs = CreateObject("ADODB.Recordset")
Set rsAttach= CreateObject("ADODB.Recordset")
cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='C:\data\CustService.accdb';Persist Security Info=False;"
cn.Open
rstDocs.Open "Documents;", cn, adOpenKeyset, adLockPessimistic, adCmdTable
rstDocs.AddNew
rstDocs("Sender").Value = omEmail.SenderEmailAddress
For Each Attachment In omEmail.Attachments
    Set rsAttach = rstDocs.Fields("Attachments").Value    ' ERROR HERE
    rsAttach.AddNew
    rsAttach.Fields("FileData").LoadFromFile TmpPath + Attachment.FileName
    rsAttach.Update
Next
rstDocs.Update
rstDocs.Close
ms-access vbscript add attachment adodb
1个回答
0
投票

rstDocs.Fields("Attachments").Value返回一个ADO Field对象,而不是您似乎期望的Recordset,因此您不能将记录添加到该字段(rsAttach.AddNew)。

如果要将附件存储为单独的记录,则可以创建一个单独的附件表,其中的ID字段与rstDocs中的电子邮件记录的ID相同。请看看这个非常相似的问题:Handling fields of Attachment type in MS Access using ADO

[Documents表:

EmailID as Number
Sender as Text
Subject as Text
Date as Date/Time
...

附件表格:

EmailID as Number
FileData as Number

此外,ADO Field对象没有LoadFromFile方法。您将确实要加载数据并将其设置为Field对象的Value属性。

© www.soinside.com 2019 - 2024. All rights reserved.