MFC的2007年呼叫接入报告
Call access 2007 report from MFC
有没有人能从MFC应用程序中调用访问报告(2007)?我有一个带有按钮的表单,当点击它时,它应该显示报告。
我试过了代码项目建议它像闪屏一样显示报告,然后消失。
有什么建议吗?
我帮助维护一个使用Access 2003/2007进行报告的MFC应用程序。这是一个我们正在尝试改变的系统- Access不是很灵活,我们在MFC中"托管"Access有点随意。
我不是主机架构设计的第一方,也不知道为什么要以某种方式实现,但这里简要概述了我们在应用程序中使用Access遇到的两个困难:
只有完整的Access安装注册Access.Application
OLE Automation接口。如果你能保证你的用户将有一个完整的Access安装,那么这将不适用于你(CLSIDFromProgID
之后的CoCreateInstance
会给你一个自动化接口),但如果你必须得到一个Access.Application
对象的访问运行时,那么有一些额外的管道要做。您需要启动msaccess.exe
,并在GetActiveObject
和Sleep
中进行操作,直到找到接口的实例。KB145707显示了两种连接方式,尽管是在VBA中。
Access不能嵌入到另一个应用程序中。Access报告没有相应的Excel.Sheet
。您可以在CodeProject示例中看到这一点——它将报告呈现给中间的.html
文件,然后使用嵌入式web浏览器控件来显示报告。
我们的应用程序在这里做了错误的事情(TM),并摆弄了Access应用程序的窗口样式,父节点和位置,使它看起来像在我们的应用程序中有一个报告,但这只是一个视觉上的技巧。虽然拥有来自不同进程的父/子窗口没有什么问题,但在这种情况下,它会给我们留下一些不希望的行为。
-
我们使用自定义的Office Ribbon,因为Access 2007的Ribbon是窗口框架的一部分,所以用户可以将Access拖出我们的应用程序。
-
当进程终止时,它放弃了它所拥有的任何"前景焦点"。当
msaccess.exe
关闭时,因为用户关闭了一个报告,我们的应用程序最终在窗口z顺序的底部(由于我们已经父化Access窗口的方式)。
我认为你应该看看实际的报表库,并将它们与你需要将Access集成到你的应用程序中的工作进行比较。
-
Microsoft Report Viewer是一个轻量级但功能强大的报表库。它使用. net,但您可以使用代理应用程序来托管该控件。从上面来看,拥有不同进程的父/子窗口是有效的。如果您可以将应用程序移植到c++/CLI,那么使用
CWinFormsControl
就更容易了。 -
SAP Crystal Reports也是免费的,但是它不像Report Viewer那么轻量级。
如果你绝对必须使用Access,我个人会避开使用自动化接口,并使用AutoExec
宏和/cmd
开关来描述我想渲染哪个报告以及渲染到哪里。AutoExec
将启动,呈现报告并关闭Access(这里有一个技术示例)。一旦创建了输出文件,就可以将其嵌入到应用程序中。几个建议:
-
如果您的报告很简单,那么坚持使用CodeProject文章中的
.html
和web浏览器示例。 -
如果你的报告有复杂的格式,你可以输出报告作为
.snp
(快照)文件,然后显示在你的应用程序中(Access快照查看器是可嵌入的- PROGID是snpvw.Snapshot Viewer Control.1
)。
- Android NDK传感器向事件队列报告奇怪的间隔
- 如何在 C 中正确使用 libiconv 使其不会报告"Arg list too long"?
- 使用std::source_location报告错误的最佳实践
- xmake总是报告:错误:无法获取cxx的程序,为什么
- 当用户超过按钮点击限制时报告
- 使用调试/崩溃报告将应用程序部署到客户端
- 为什么cudaMemGetInfo报告设备内存总量的变化
- 为什么瓦尔格林德在不释放恶意内存后没有报告任何问题?
- 内存清理程序报告全局对象构造中未初始化值的使用
- QDataStream 读取和写入的字节数比 QFile::length() 报告要多
- ESP32 无法识别任何设备已连接到其接入点
- 在 Linux 中使用 ioctl() 获取隐藏功能报告时,零字节消失
- Valgrind 在 std::string::swap 中报告 SIGILL
- DRD 报告"conflicting load" std::mutex::lock 上的错误
- 柯南,CMake.test()生成XML报告
- 如何在 Linux 中务实地检索连接的接入点信息
- 如何构建一个异常类来报告C++中的哪些文件和行号?
- Valgrind 在 QThread::start() 上报告内存泄漏
- 我是否访问了已释放的内存,或者在这种情况下DrMemory报告不正确?
- MFC的2007年呼叫接入报告