【发布时间】:2019-10-08 14:34:30
【问题描述】:
我正在编写一个脚本,将电子邮件从 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
【问题讨论】:
-
两个想法:你确定ADOBO是正确的方式吗?许多示例使用 DAO 代替。因为你没有显示变量
rsAttach的声明,所以我只能建议不要使用它,而是使用With块:With rstDocs.Fields("Attachments").AddNew等等...End With。跨度> -
@UnhandledException DAO 是较老的技术,ADO 是现在常用的(related)。
-
@Hardy 每当您遇到类型错误时,第一个调试步骤是检查变量/值 (
WScript.Echo TypeName(rstDocs.Fields("Attachments").Value)) 的实际类型。该值可能不是对象。在这种情况下,您不能使用Set关键字来分配值。
标签: ms-access vbscript add attachment adodb