Почему при добавлении вложений для доступа к БД через скрипт возникают ошибки - PullRequest
0 голосов
/ 04 октября 2019

Я пишу скрипт, который доставляет письма из почтового ящика 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

1 Ответ

0 голосов
/ 05 октября 2019

rstDocs.Fields("Attachments").Value возвращает объект ADO Поле , а не набор записей, как вы ожидаете, поэтому вы не можете добавить запись в это поле (rsAttach.AddNew).

Если вы хотите сохранить вложения как отдельные записи, вы можете создать отдельную таблицу вложений, в которой у вас есть поле идентификатора, совпадающее с идентификатором записи электронной почты в rstDocs. Пожалуйста, взгляните на этот очень похожий вопрос: Обработка полей типа Вложения в MS Access с использованием ADO

Документы Таблица:

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

Вложения таблица:

EmailID as Number
FileData as Number

Кроме того, объект поля ADO не имеет метода LoadFromFile. Вам нужно будет загрузить данные и установить их для свойства Value объекта Field.

...