我正在编写一个脚本,将来自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
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属性。