使用CAccessReports类操作Access数据库报告

在Visual C++应用程序中操作MicrosoftAccess数据库报告可能会是一个挑战,特别是当需要从应用程序内部打开、运行、打印和保存报告为HTML格式时。CAccessReports类为此提供了一个解决方案。这个类利用Access Automation对象来实现这些功能,使得可以用一行代码完成这些任务。

CAccessReports类简介

CAccessReports类是为了那些不幸需要使用MSAccess数据库引擎,并且需要从Visual C++应用程序中使用它的人设计的。这个类使用Access Automation对象来打开指定的数据库,运行报告,打印报告,并将Access数据库保存为HTML格式,以便在Visual C++应用程序中查看。

如何使用CAccessReports类

下载CAccessReports类的源代码时,还会找到一个完整的测试应用程序。但在下载、解压并运行别人的代码之前,能够先了解将得到什么总是很好的。因此,以下是一些代码片段,展示了CAccessReports类是多么容易使用。

如何实例化CAccessReports对象取决于计划如何在应用程序中使用它。CAccessReports的第一个参数是数据库文件的完全限定名称。第二个参数指定是否希望CAccessReports类预加载所有报告名称。如果应用程序需要向最终用户显示报告列表,那么可能希望类检索所有报告名称。否则,如果实例化CAccessReports对象是为了运行、打印或显示特定报告,这些报告的名称在编译时已知,可以将这个参数的值设置为FALSE。

// 让CAccessReports对象加载报告名称 CAccessReports accessReports(YOUR_ACCESS_DATABASE, TRUE); // 简单地附加到指定的Access数据库 CAccessReports accessReports(YOUR_ACCESS_DATABASE, FALSE);

如果在CAccessReports构造函数的第二个参数中指定了TRUE,那么可以从给定的Access数据库中检索报告列表。以下是一个简单的循环示例,用于检索并显示所有报告名称。

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

虽然CAccessReports类允许从Visual C++应用程序中显示Access报告(如下所示),但仍然有合理的理由在Access内部运行报告。因此,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);

Access Automation不允许将报告的输出重定向到指定窗口。但是,它允许运行报告然后保存为HTML格式。结合Visual C++6.0的CHtmlView,可以运行Access报告并在Visual C++应用程序中显示它。以下示例中,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); }

不幸的是,Visual C++ 5.0没有CHtmlView类。但是,仍然可以使用Visual C++组件库中的WebBrowser控件来显示Access报告。为了在Visual C++ 5应用程序中显示Access报告,只需实例化一个CAccessReports对象,调用其SaveAsHtml成员函数,然后调用WebBrowser控件的Navigate函数,指定HTML文件的名称。

Access Automation不能用于获取Access数据库的完整报告列表。因此,如果在CAccessReports构造函数的第二个参数中指定了TRUE,类会尝试使用MFC DAO类来访问指定数据库的msysobjects表。为了实现这一点,必须给Admin用户“读取”数据库的msysobjects表的权限(见下文)。如果应用程序正在打印或查看特定数据库的特定报告,并且不需要报告列表,那么这个限制就不适用。如果有人知道更好的方法,请随时告诉,总是乐于学习新事物。

打开Microsoft Access

从工具菜单中,选择选项菜单选项

在视图标签页上,点击系统对象复选框

点击确定保存更改

从工具菜单中,选择安全 -> 用户和组权限菜单选项

点击权限标签页

在对象类型组合框中选择表条目

在用户/组名称列表框中选择Admin用户ID

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485