【问题标题】:Why does adding attachments to access DB via script generate errors为什么通过脚本添加附件以访问数据库会产生错误
【发布时间】: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


【解决方案1】:

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

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

文档表:

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

附件表:

EmailID as Number
FileData as Number

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-03
    • 2014-02-01
    • 2022-08-15
    • 2021-06-08
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多