15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


 

CAccessReports - Класс для печати и просмотра отчётов MS Access


Автор: Tom Archer.

Компилятор: Visual C++ 6.

Этот класс (CAccessReports) был создан для тех, у кого есть потребность в использовании 1) движка базы данных MS Access и 2) движка MS Access из под Visual C++ приложений. Класс CAccessReports использует объекты Access Automation для открытия специфической базы, запуска отчёта (в пределах Access), печати отчёта и сохранения базы Access в HTML формате, чтобы её можно было просматривать в приложении Visual C++.

Инициализация объекта CAccessReports

Как инициализировать объект CAccessReports, зависит от того, как Вы планируете использовать его в Вашем приложении. Первый аргумент CAccessReports - это полное имя файла базы данных. Второй аргумент указывает - хотите ли вы, чтобы класс CAccessReports предварительно подгружал все имена отчётов. В примере подразумевается, что Вам нужны все имена отчётов, и приложение отобразит весь список отчётов. Иначе, если Вам понадобятся для запуска, печати или отображения определённые, то второй аргумент надо поставить в FALSE.

// Объект CAccessReports загружает все имена отчётов
CAccessReports accessReports(YOUR_ACCESS_DATABASE, TRUE);

// Простое присоединение к указанной базе Access
CAccessReports accessReports(YOUR_ACCESS_DATABASE, FALSE);

Получение списка отчётов из базы данных Access

Если Вы указываете в качестве второго аргумента TRUE в конструкторе CAcessReport, то Вам необходимо получить список отчётов для данной базы данных Access. Вот пример простого цикла для получения и отображения всех имён отчётов.

CAccessReports accessReports(YOUR_ACCESS_DATABASE, TRUE);

for (int i = 0; i < accessReports.m_reports.GetSize(); i++)
{
 AfxMessageBox(accessReports.m_reports[i]);
}

Запуск отчёта

Для этого используется функция-член RunReport.

CAccessReports accessReports(YOUR_ACCESS_DATABASE, FALSE); 
accessReports.RunReport(YOUR_REPORT_NAME);

Печать отчёта

Функция PrintReport содержит только один аргумент - имя отчёта. Эта функция вызывает RunReport и затем использует Automation для печати отчёта.

CAccessReports accessReports(YOUR_ACCESS_DATABASE, FALSE); 
accessReports.PrintReport(YOUR_REPORT_NAME);

Отображение отчёта (Visual C++ 6.0)

Access Automation не даёт возможности выводить отчёт данное окно. Однако она позволяет запустить, а затем сохранить отчёт в HTML формате. В нижеприведённом примере, CAccessReportView наследуется от класса CHtmlView.

void CAccessReportView::OnInitialUpdate()
{
 CHtmlView::OnInitialUpdate();

 CAccessReports accessReports(YOUR_ACCESS_DATABASE, FALSE); 
 accessReports.SaveAsHtml(YOUR_REPORT_NAME, DESTINATION_FOLDER);
 Navigate2(FULLY_QUALIFIED_FILE_NAME, NULL, NULL);
}

Замечание

  • 1. Access Automation не может использоваться для получения всего списка отчётов для базы данных Access. Следовательно, если Вы указываете во втором аргументе TRUE конструктора CAccessReports , то класс пытается использовать классы MFC DAO для доступа к таблице msysobjects указанной базы данных. Чтобы разрешить это, Вы должны дать пользователю Admin права "чтения" таблицы msysobjects указанной базы. Если нет необходимости в получении списка отчётов, то данное ограничение не нужно принимать во внимание.

Скачать исходник - 38 KB

Скачать демонстрационный проект - 60 KB