Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Отправка отчетов Access по почте

1.5K
24 июля 2003 года
shtutsa
50 / / 27.03.2003
Буду очень признателен за содержательный ответ, либо ссылочку на статью по следующему вопросу:
Как можно отправить отчет, сгенерированный Access в качестве вложения к эл. письму.

Т.е. последовательность действий:
1. Генерируется отчет в Access
2. Сохраняется например в файле RTF (при этом пропадают границы у таблиц) или PDF (с границами все в порядке) на диск
3. Файл шифруется (есть BAT файл который запускает программу шифрования с необходимыми ключами)
4. Зашифрованный файл высылается адресату как вложение к электронному письму.

Интересно все, что связяно с реализацией действий 2-4 :)))

Спасибо.
258
24 июля 2003 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by shtutsa

2. Сохраняется например в файле RTF (при этом пропадают границы у таблиц) или PDF (с границами все в порядке) на диск



Сохранить отчет еще можно в формат - Снимок (*.snp) - спец. формат для хранения и печати отчетов, очень точная копия.

Цитата:
Originally posted by shtutsa

3. Файл шифруется (есть BAT файл который запускает программу шифрования с необходимыми ключами)



BAT файл с ключами все запускает, но .... имя файла, который ты токо что из Access экспортировал, в него уже не засунешь. Т.е. только если ты программно создашь новый bat (заполнишь его как полагается), и запустишь.... Но тогда проще вообще не создавать никого bat'ника, а сразу использовать функцию API типа Shell, например:

Код:
' в модуле
Private Const INFINITE = &HFFFF
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, _
                ByVal dwMilliseconds As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwAccess As Long, _
                ByVal fInherit As Integer, ByVal hObject As Long) As Long
 
    ' Запускаем внешнюю программу и ждем ее завершения
     WaitForProcessToEnd "C:\test.exe /p ля-ля и т.д."
 
  ' А вот вспомогательная процедурка
  Public Sub WaitForProcessToEnd(cmdLine As String)
   Dim retVal As Long, pID As Long, pHandle As Long
          pID = Shell(cmdLine)
          pHandle = OpenProcess(&H100000, True, pID)
          retVal = WaitForSingleObject(pHandle, INFINITE)
  End Sub


Цитата:
Originally posted by shtutsa

4. Зашифрованный файл высылается адресату как вложение к электронному письму.
Спасибо.



Устанавливаешь связь с Outlook через CreateObject("Outlook.Application"), создаешь письмо, цепляешь файл и отправляешь, если надо, могу привести код...

1.5K
24 июля 2003 года
shtutsa
50 / / 27.03.2003
Цитата:
Originally posted by SergeySV

Устанавливаешь связь с Outlook через CreateObject("Outlook.Application"), создаешь письмо, цепляешь файл и отправляешь, если надо, могу привести код...



YES!!! Спасибо огромное за помощь!
Если не сложно, приведи код, который создает и отправляет через Outlook (Outlook Express) мыло :)

1.5K
24 июля 2003 года
shtutsa
50 / / 27.03.2003
Цитата:
Originally posted by shtutsa


YES!!! Спасибо огромное за помощь!
Если не сложно, приведи код, который создает и отправляет через Outlook (Outlook Express) мыло :)



А лучше скажи, каким образом можно узнать какие методы и свойства поддерживает приложение?
По-моему, в редакторе VBA по F2 вызывается objectbrowser...

258
24 июля 2003 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by shtutsa


YES!!! Спасибо огромное за помощь!
Если не сложно, приведи код, который создает и отправляет через Outlook (Outlook Express) мыло :)



Код:
Dim myOlApp As Object
Dim myItem As MailItem
Dim myAttachments As Attachments
Dim Path As String, str as String

  ' создаем связь с Outlook, запуская свою копию Outlook, она не будет видена на экране, пока не установишь ей свойства: myOlApp.Visible = True    

  Set myOlApp = CreateObject("Outlook.Application")

  ' Создаем письмо  
  Set myItem = myOlApp.CreateItem(0)

  ' Формирование письма
  myItem.To = "aaa@mail.ru"
  myItem.Subject = "Hi, это тема письма"
  str = "Это текст письма"
  str = str + Chr(13) & "Это вторая строка текста письма"
  myItem.Body = str
  ' объект - присоединенный файл
  Set myAttachments = myItem.Attachments
  ' путь к присоединяемому файлу
  Path = "C:\test.dat"
  ' присоединяем файл
  myAttachments.Add Path, olByValue, 1, "test.dat - это название файла для отображения в письме"
  ' посылаем письмо
  myItem.Send


Для того чтобы все это работало необходимо в Tools/References подключить библиотеку - Microsoft Outlook 10.0/9.0/8.0 Object Library

На счет Outlook Express. C ним не работал, не знаю. У меня всегда стоял Microsoft Outlook. Надо смотреть, есть ли среди библиотек (в Tools/References) какая-нибудь Microsoft Outlook Express.... и поддерживает ли она вышуказанные объекты и методы ... у самого не стоит, посмотреть не могу
Но есть подозрение, что библиотеку - Microsoft Outlook 10.0/9.0/8.0 Object Library может пихать Office и без установки MOutlook, так, на всякий случай... вообщем надо смотреть что стоит на компе, у которого только Express.
258
24 июля 2003 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by shtutsa


А лучше скажи, каким образом можно узнать какие методы и свойства поддерживает приложение?
По-моему, в редакторе VBA по F2 вызывается objectbrowser...



Ну да, F2. Еще когда объектные переменные пишешь, у них свойства и методы вываливаются... :)
С Outlook, Excel, Access вообще просто, подключил библиотеку, на какой-нибудь их объект курсор навел, F1 нажал, до главного объекта - Application добрался и всю древовидную иерархию объектов увидел и обрадовался...

1.5K
24 июля 2003 года
shtutsa
50 / / 27.03.2003
Среди доступных библиотек на моей машине только Outlook Express Mime Editor.
А вот библиотеки Microsoft Outlook 10.0/9.0/8.0 Object Library я не нашел.
Хотя у меня установлен Outlook из пакета Office97Rus (я им не пользуюсь, т.к. не получается установить службу Internet Mail и после установки приложения MINET.ECF она в списке так и не появляется - видимо не удачно кракнутый дистрибутив :). Также стоит Outlook Express из поставки WindowsXPEng - вот им я и пользуюсь постоянно.
После добавления библиотеки Outlook Express Mime Editor, код выполнился нормально (до этого ругался на MailItem и Attachments). Письмо создалось, но в Outlook из Office97 и соотв. никуда она отправлено не было :(
Пробовал вместо Outlook.Application писать OutlookExpress.Application - ругается на код.
Как быть?
258
24 июля 2003 года
SergeySV
1.5K / / 19.03.2003
У меня дома тоже WinXp без Outlook стоит (The Bat'ом пользуюсь :) ), так что дома пощупаю что там за библиотеки по умолчанию ставятся...

Но даже если через Outlook Express не получится, то можно тогда и по другому отправлять, через MAPI
258
24 июля 2003 года
SergeySV
1.5K / / 19.03.2003
Дело в то, что MAPI - это универсальный интерфейс, который поддерживают многи почтовые программы для работы с почтой. Outlook Express тоже его поддерживает
258
25 июля 2003 года
SergeySV
1.5K / / 19.03.2003
Вот, привожу функцию для отправки письма с вложенными файлами через MAPI. Для того чтобы он работал необходимо в системе зарегестрировать файл MSMAPI32.OCX (если у тебя его еще нет). Файл на всякий случай прикладываю. (Если возникнут трудности с добавление в проект этого ActiveX, пиши, подскажем).

Пример функции:
Код:
Function SendEmail(xAddress As String, xSubject As String, xText As String, ByVal xAttachments) As Boolean
 ' Отправка письма с вложенным(или без него) файлом через MAPI.
 ' Для работы необходимо установить компонент - MSMAPI32.OCX
 ' xAttachments - это массив содержащий пути к файлам для присоединения в письму
 
 Dim objSession As Object, objMessage As Object
 Dim objOneRecip As Object
 Dim i As Integer

 On Error GoTo error_sendMsg
 ' Создаем сессию
 Set objSession = CreateObject("MSMAPI.MAPISession")
 ' Получаем доступ к серверу, логинимся по умолчанию
 objSession.SignOn
 ' Создаем письмо
 Set objMessage = CreateObject("MSMAPI.MAPIMessages")
 ' Связываем письмо с сессией (иначе работать не будет)
 objMessage.SessionID = objSession.SessionID
 ' Начинаем составлять сообщение
 ' очищаем буфер редактирования
 objMessage.Compose
 ' устанавливаем индекс работы с сообщением.
 ' "-1" - сообщение в буфере редакт., т.е. исходящее
 objMessage.MsgIndex = -1
 ' заполняем поля сообщения
 objMessage.RecipAddress = xAddress
 ' Чтобы диалоговое окно с неоднозначными именами не отображалось
 objMessage.AddressResolveUI = False
 objMessage.MsgSubject = xSubject
 objMessage.MsgNoteText = xText
   
 ' Присоединяем файлы (если они есть)
 If IsArray(xAttachments) Then
  For i = 0 To UBound(xAttachments)
    objMessage.AttachmentIndex = objMessage.AttachmentCount
    objMessage.AttachmentPathName = xAttachments(i)
  Next
 End If
   
 ' посылаем сообщение не показывая его
 objMessage.Send False
 ' отсоединяемся от сервера
 objSession.SignOff
   
 SendEmail = True
   
Exit_Fun:
  Exit Function
   
error_sendMsg:
  SendEmail = False
  Resume Exit_Fun
   
End Function


Подробнее про MAPI можно почитать здесь: http://www.firststeps.ru/vb/msmapi/msmapi1.html
1.5K
25 июля 2003 года
shtutsa
50 / / 27.03.2003
1. Скачал msmapi32.ocx. Скопировал его в %windir%\system
2. установил - regsvr32 msmapi32.ocx - сообщение succeded
3. Скопировал текст функции в модуль Access, создал ее вызов
4. В пошаговом режиме запустил - вываливается с ошибкой невозможно создать ActiveX объект в Set objSession = CreateObject("MSMAPI.MAPISession")
5. На всякий случай проверил Сервис-Элементы ActiveX в списке присутствуют Microsoft MAPI Session Control, version 6.0 и Microsoft MAPI Message Control, version 6.0. Сделал еще раз подключение - Подключить - %windir%\system\msmapi32.ocx
6. повторилось действие 4 с ошибкой
7. проверил, что Outlook Express является клиентом по умолчанию - здесь по-моему ошибка - OE клиентом по умолчанию не является и установить его таковым не получается (после обновления окна он пишет, что не является клиентом, а в свойствах инета он не выпадает в списке)

[QUOTE]Originally posted by SergeySV
Вот, привожу функцию для отправки письма с вложенными файлами через MAPI. Для того чтобы он работал необходимо в системе зарегестрировать файл MSMAPI32.OCX (если у тебя его еще нет). Файл на всякий случай прикладываю. (Если возникнут трудности с добавление в проект этого ActiveX, пиши, подскажем).
258
25 июля 2003 года
SergeySV
1.5K / / 19.03.2003
Прикольно, у меня на работе почему такая же ошибка о неправильной регистрации выпадает... должен работать... ща посмотрим, почему он капризничает...

Причем у меня с выбором в IE почтовой программы все нормально, так что дело в ocx, может испортился после переноса....
1.5K
25 июля 2003 года
shtutsa
50 / / 27.03.2003
Кстати, после всех экспериментов над базой она стала зависима к наличию в системе Outlook (из Office97). Если его удалить, то при запуске ругается, что не найдена библиотека библиотека для выполнения функции format над строками :)
Вычислил, что это файл C:\Program Files\Microsoft Office\Office\MSOUTL8.OLB (un-инсталлировал Outlook, когда работал Access - этот файл оказался занят).
Теперь вот Access работает без Outlook, но как переносить программу на другие компы, где нет MSOUTL8.OLB? В общем, надо где-то эту привязку прибить...

Цитата:
Originally posted by SergeySV
Прикольно, у меня на работе почему такая же ошибка о неправильной регистрации выпадает... должен работать... ща посмотрим, почему он капризничает...

Причем у меня с выбором в IE почтовой программы все нормально, так что дело в ocx, может испортился после переноса....

1.5K
25 июля 2003 года
shtutsa
50 / / 27.03.2003
Цитата:
Originally posted by shtutsa
Кстати, после всех экспериментов над базой она стала зависима к наличию в системе Outlook (из Office97). Если его удалить, то при запуске ругается, что не найдена библиотека библиотека для выполнения функции format над строками :)
Вычислил, что это файл C:\Program Files\Microsoft Office\Office\MSOUTL8.OLB (un-инсталлировал Outlook, когда работал Access - этот файл оказался занят).
Теперь вот Access работает без Outlook, но как переносить программу на другие компы, где нет MSOUTL8.OLB? В общем, надо где-то эту привязку прибить...


С этой траблой я сам разобрался - в сервис-ссылки - надо было поотключать лишние библиотеки.

258
25 июля 2003 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by shtutsa

С этой траблой я сам разобрался - в сервис-ссылки - надо было поотключать лишние библиотеки.



Прикольно, а что отключал (я тока двигал вверх вниз, типа.. приоритеты, иногда помогает когда конфликты)?

1.5K
28 июля 2003 года
shtutsa
50 / / 27.03.2003
Цитата:
Originally posted by SergeySV


Прикольно, а что отключал (я тока двигал вверх вниз, типа.. приоритеты, иногда помогает когда конфликты)?



Надо было снять сслыку на Microsoft Outlook 8.0 Object Library

Так как по поводу подключения msmapi.ocx?

258
28 июля 2003 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by shtutsa


Надо было снять сслыку на Microsoft Outlook 8.0 Object Library

Так как по поводу подключения msmapi.ocx?



Я думал ты это про msmapi.ocx... :)

Глюк изредка встречается на просторах инета, правда до правильного ответа я пока не добрался... то что предлагали не работает... есть идеи что якобы этот ActiveX требует определ. лизенции - соответ. ключа в реестре... есть описание у Microsoft этого глюка, правда для программирования под FoxPro, там они вообще в качестве решения предлагали не писать через CreateObject, а через Set a=New MSMAPI.MAPISession, но в нашем случае это не проходит... :(

Кстати, у тебя VB6 стоит на компе?

1.5K
28 июля 2003 года
shtutsa
50 / / 27.03.2003
Цитата:
Originally posted by SergeySV
Кстати, у тебя VB6 стоит на компе?



Нет. VB я себе не ставил.

258
28 июля 2003 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by shtutsa


Нет. VB я себе не ставил.



Хм.....у меня раньше стоял на этой машине VB6, пока не пришлось систему переставлять.... интересно как с ним он будет работать...

В инете пишут разное, кто-то говорит что этот Activex обязательно надо пихать на форму, а через CreateObject он не будет работать (но на форму он тоже не хочет пихаться), другие пишут, что Office должен поддерживать msmapi32.ocx на ура....

1.5K
28 июля 2003 года
shtutsa
50 / / 27.03.2003
Ладно, к этому траблу я еще вернусь попозже. В конце концов, можно какой-нибудь BLAT использовать для отправки почты.
А как программно сохранить отчет на диск? Жаль, что в Access нет макрорекордера :)
258
28 июля 2003 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by shtutsa
Ладно, к этому траблу я еще вернусь попозже. В конце концов, можно какой-нибудь BLAT использовать для отправки почты.
А как программно сохранить отчет на диск? Жаль, что в Access нет макрорекордера :)



Сам больше импортировал, чем экспортировал, ща посмотрим: или через VBA или программное меню DoCmd.MenuItems....

258
28 июля 2003 года
SergeySV
1.5K / / 19.03.2003
Вот, посмотри, есть метод объекта DoCmd под названием OutputTo:
 
Код:
DoCmd.OutputTo acOutputReport, "rp333", _
    acFormatSNP, "rpp333.snp", False
258
28 июля 2003 года
SergeySV
1.5K / / 19.03.2003
Есть у меня пара идей, на счет msmapi32.ocx, кажется я понял что он хочет, дома приду, проверю еще.
258
29 июля 2003 года
SergeySV
1.5K / / 19.03.2003
Эксперименты показали вот что:
Если в систему поставить VB6, то компонентом msmapi32.ocx можно запросто пользоваться в Office. Так что можно ставить, а потом удалять VB6..... :)

Что точно он прописывает в реестре для работы (или еще что) я пока не определил, условия были не идеальные, но попытаюсь докопаться, как же установить этот компонент без VB6, самому интересно ... :)
258
29 июля 2003 года
SergeySV
1.5K / / 19.03.2003
Хе-хе, поздравь меня, я нашел... :)

Дело было действительно в лицензионных ключах. Некоторые ActiveX компоненты для работы требуют, чтобы в реестре, в разделах:
1. HKEY_CLASSES_ROOT\Licenses\
2. HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Licenses\
были созданы соответствующие ключи.
Они автомат. создаются когда программу инсталир. с соответ. компонентами, а вот если ты сам отдельно ставишь, тогда ручками надо дописывать(вот только что дописывать неизвестно).

Однако добрые люди уже постарились и создали reg файл с лиценз. ключами наиболее распространенных строптивых компонентов. Вот, прикладываю.
Просто запусти его и он добавит в реестр необходимые ключи.
1.5K
30 июля 2003 года
shtutsa
50 / / 27.03.2003
Поздравляю и снимаю шляпу!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог